Add privatri wco

This commit is contained in:
devpotatoes
2025-08-11 09:31:24 +02:00
16 changed files with 2706 additions and 507 deletions

BIN
apxtri.objects.setup.zip Normal file

Binary file not shown.

View File

@@ -196,7 +196,7 @@ apx.listendatawco = (newpropertie) => {
if (!apx.wco) apx.wco = {};
console.log(
"wco dynamic into the webpage",
apx.wco,
apx.data.wco,
"no propertie to add:",
!newpropertie
);
@@ -217,13 +217,19 @@ apx.listendatawco = (newpropertie) => {
const elements = document.querySelectorAll(`[data-wco='${p}']`);
elements.forEach((e) => actionprop(apx.data.wco[p], e));
//console.log(p, Object.hasOwnProperty(apx.wco));
if (Object.hasOwnProperty(apx.wco)) {
Object.defineProperty(apx.wco, p, {
if (!apx.data.wco.hasOwnProperty(p)) {
let _val = apx.data.wco[p]; // Stocke la valeur initiale
Object.defineProperty(apx.data.wco, p, {
get: () => _val,
set: (newv) => {
this[p] = newv;
_val = newv; // Met à jour la valeur interne
const elements = document.querySelectorAll(`[data-wco='${p}']`); // Re-sélectionne les éléments au cas où le DOM aurait changé
elements.forEach((e) => actionprop(newv, e));
},
});
if (_val !== undefined) {
apx.data.wco[p] = _val;
}
}
});
};
@@ -491,7 +497,7 @@ apx.update = async () => {
console.log("WARNING!!, local apxtri.wco was erase by updatelocaldb.wco");
}*/
Object.keys(initset.data.data).forEach((k) => {
if (k != "headers") {
if (k !== "headers") {
apx.data[k] = initset.data.data[k];
}
});

View File

@@ -2,7 +2,7 @@ var apx = apx || {};
apx.apxauth = {};
apx.apxauth.loadwco = async (id, ctx) => {
// check if not authenticate, do nothing cause by default screensignin and wait authentification
// if authenticate, if url xhash then redirect if no url then change wco-link=screenmytribes
// if authenticate, if url xhash then redirect if no url then change wco-link=screenmyworld
// if (dayjs(apx.data.headers.xdays).diff(dayjs(), "hours") >= 24) apx.apxauth.checkisauth();
//load main.mustache of the component
//when wco-xxx change it run this function
@@ -35,7 +35,7 @@ apx.apxauth.getdata = (id, ctx) => {
? apx.data.appdata.emailsupport
: "";
switch (ctx.link) {
case "logout":
case "myworld":
if (!data.profils) data.profils = [];
apx.data.headers.xprofils.forEach((p) => {
if (!["anonymous", "pagans", "persons"].includes(p)) {
@@ -45,15 +45,47 @@ apx.apxauth.getdata = (id, ctx) => {
data.noprofils = data.profils.length == 0;
data.member = apx.data.headers.xprofils.includes("persons");
data.websites = apx.data.appdata.websites;
// get tribes activities
/*["", "https://wall-ants.ndda.fr"];
data.optionlinks=apx.data.tpldata[tpldataname].optionlinks
data.town=apx.data.town
data.nation=apx.data.nation
if (1==1 || apx.data.headers.xprofils.includes('major')){
apx.data.tpldata[tpldataname].optionlinksmajor.forEach(o=>data.optionlinks.push(o))
apx.save()
}
// get towns list
axios
.get(`/api/apxtri/tribes/activities`, {
.get(`/api/apxtri/odmdb/idx/apxtri/towns/towns`, {
headers: apx.data.headers,
})
.then((rep) => {})
.catch((err) => {});
*/
.then((rep) => {
console.log(rep)
if (rep.status==200){
apx.data.itms.towns=rep.data.data.idx
data.townsnumber= Object.keys(apx.data.itms.towns).length;
apx.data.wco.townsnumber={textContent:Object.keys(apx.data.itms.towns).length};
apx.listendatawco('townsnumber');
apx.save()
}
})
.catch((err) => {
console.log("ERROR, geting towns itms not available",err)
});
axios
.get(`/api/apxtri/odmdb/idx/apxtri/pagans/lst_alias`, {
headers: apx.data.headers,
})
.then((rep) => {
if (rep.status==200){
console.log(rep)
data.pagansnumber=rep.data.data.idx.length
apx.data.wco.pagansnumber={textContent:rep.data.data.idx.length};
apx.listendatawco('pagansnumber');
apx.save();
}
})
.catch((err) => {
console.log("ERROR, geting pagans itms not available",err)
});
break;
default:
break;
@@ -253,7 +285,7 @@ apx.apxauth.authentifyme = async (
//location.reload();
document
.getElementById(idparent)
.setAttribute("wco-link", "mytribes");
.setAttribute("wco-link", "myworld");
}
})
.catch((err) => {
@@ -484,7 +516,7 @@ apx.apxauth.authenticatedetachedSignature = async (
message
) => {
/**
* Check that alias (pubkey) signe a message
* Check that alias (pubkey) sign a message
* @alias {string} alias link to the publickey
* @pubK {string} publiKey text format
* @detachedSignature {string} a detachedsignatured get from apx.apxauth.detachedSignature

View File

@@ -1,39 +0,0 @@
<div class="flex flex-col space-y-1 text-center">
<div class="mt-1">
<h1 class="mb-6">
Bonjour {{xalias}},
</h1>
<p>
Si cet appareil ne vous appartiens pas et que vous n'utilisez pas l'application, vous devriez vous deconnecter.
</p>
<p class="text-center text-gray-500">
Nettoyer mes traces de cet appareil?
<a class="font-semibold leading-6 text-secondary hover:text-primary"
onclick="apx.apxauth.logout('{{id}}','logout','logout','apxauth')">Se deconnecter</a>
</p>
</div>
<div class="mt-4">
<p class="text-center text-gray-500">
Voir mes échanges?
<a class="font-semibold leading-6 text-secondary hover:text-primary"
href="https://wall-ants.ndda.fr/apxwallet_fr.html" >Mon activité </a>
</p>
{{#member}}
<p>
Vous êtes membre de {{xtribe}} {{#noprofils}} sand profil particulier {{/noprofils}} {{^noprofils}}avec le(s) profil(s):<br><span class="text-info"> {{#profils}} {{.}}<br> {{/profils}} </span> {{/noprofils}}
</p>
{{/member}}
{{^member}}
<p> Vous n'êtes pas encore membre de {{xtribe}} </p>
<p class=" mt-1 text-center text-gray-500">
Envie d'jouter cette tribut {{xtribe}}?
<a class="font-semibold leading-6 text-secondary hover:text-primary"
onclick="apx.apxauth.jointribe('{{id}}')">Rejoindre {{xtribe}}</a>
</p>
{{/member}}
<p>Les applications ou pages web de {{xtribe}} à visiter:<br>
{{#websites}}<a class="font-semibold leading-6 text-secondary hover:text-primary" href='{{{href}}}'>{{{name}}}</a><br> {{/websites}}
</p>
<button class="btn btn-primary" onclick="apx.apxauth.runtest()">testbtn</button>
</div>
</div>

View File

@@ -1,23 +0,0 @@
<div class="flex flex-col space-y-1 text-center">
<div class="mt-1">
<h1 class="mb-6">
Bonjour {{xalias}},
</h1>
</div>
<div class="mt-4">
<p class="text-center text-gray-500">
Redirige vers
<a class="font-semibold leading-6 text-secondary hover:text-primary"
onclick="apx.apxauth.redirecturlwithauth('http://recruiter.smatchit.newdev.ants/src/offer_fr.html','smatchit','recruiter',true);" >Redirige vers recruiter.smatchit.io/offer_fr.html&xhash....</a>
</p>
{{#member}}
<p>
Vous êtes membre de {{xtribe}} {{#noprofils}} sand profil particulier {{/noprofils}} {{^noprofils}}avec le(s) profil(s):<br><span class="text-info"> {{#profils}} {{.}}<br> {{/profils}} </span> {{/noprofils}}
</p>
{{/member}}
<p>Les applications ou pages web de {{xtribe}} à visiter:<br>
{{#websites}}<a class="font-semibold leading-6 text-secondary hover:text-primary" href='{{{href}}}'>{{{name}}}</a><br> {{/websites}}
</p>
<button class="btn btn-primary" onclick="apx.apxauth.runtest()">testbtn</button>
</div>
</div>

View File

@@ -0,0 +1,41 @@
<div class="p-2">
Authentifié avec l'alias: <span class="text-success">{{xalias}}</span> dans <span class="text-success">{{town}}-{{nation}}</span>
</div>
<div class="p-4 grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4 justify-items-center">
{{#optionlinks}}
<div class="indicator">
{{#notification_count}}
<span class="indicator-item badge badge-{{typebadge}} text-white">{{notification_count}}</span>
{{/notification_count}}
<a {{{onclick}}} title="{{title}}" class="grid w-20 h-20 bg-base-200 rounded-lg place-items-center hover:bg-base-300 transition-colors">
{{{svg}}}
</a>
</div>
{{/optionlinks}}
</div>
<div class="flex justify-center p-2">
<div class="stats stats-horizontal shadow">
<div class="stat place-items-center">
<div class="stat-title">Nombre d'uniques</div>
<div class="stat-value" data-wco="pagansnumber">{{pagansnumber}}</div>
<div class="stat-desc">identités actives</div>
</div>
<div class="stat place-items-center">
<div class="stat-title">Nombre de towns</div>
<div class="stat-value text-secondary" data-wco="townsnumber">{{townsnumber}}</div>
<div class="stat-desc text-secondary">Actives en ce moment</div>
</div>
</div>
</div>
<div class="p-4 grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4 justify-items-center">
{{#mytribes}}
<div class="indicator">
{{#notification_count}}
<span class="indicator-item badge badge-{{typebadge}} text-white">{{notification_count}}</span>
{{/notification_count}}
<a {{{onclick}}} title="{{title}}" class="grid w-20 h-20 bg-base-200 rounded-lg place-items-center hover:bg-base-300 transition-colors">
{{{tribename}}}
</a>
</div>
{{/mytribes}}
</div>

View File

@@ -3,61 +3,72 @@ var apx = apx || {};
apx.crypto = apx.crypto || {};
apx.crypto.genKey = async (uuid) => {
return await openpgp.generateKey(
{
return await openpgp.generateKey({
type: "ecc",
curve: "curve25519",
userIDs: [
{
alias: uuid
}
alias: uuid,
},
],
passphrase: "",
format: "armored",
}
);
});
};
apx.crypto.encryptMessage = async (message, publicKey) => {
publicKey = await openpgp.readKey(
{
armoredKey: publicKey
}
);
publicKey = await openpgp.readKey({
armoredKey: publicKey,
});
return await openpgp.encrypt(
{
message: await openpgp.createMessage(
{
text: message
}
),
encryptionKeys: publicKey
}
);
return await openpgp.encrypt({
message: await openpgp.createMessage({
text: message,
}),
encryptionKeys: publicKey,
});
};
apx.crypto.decryptMessage = async (encryptedMessage, privateKey) => {
privateKey = await openpgp.readPrivateKey(
{
armoredKey: privateKey
}
);
privateKey = await openpgp.readPrivateKey({
armoredKey: privateKey,
});
const message = await openpgp.readMessage(
{
armoredMessage: encryptedMessage
}
);
const message = await openpgp.readMessage({
armoredMessage: encryptedMessage,
});
return await openpgp.decrypt(
{
return await openpgp.decrypt({
message,
decryptionKeys: privateKey
}
);
decryptionKeys: privateKey,
});
};
apx.crypto.isSignedby = async (
alias,
publicKey,
detachedSignature,
message
) => {
const publickey = await openpgp.readKey({ armoredKey: publicKey });
const msg = await openpgp.createMessage({ text: message });
const signature = await openpgp.readSignature({
armoredSignature: atob(detachedSignature), // parse detached signature
});
const verificationResult = await openpgp.verify({
msg, // Message object
signature,
verificationKeys: publickey,
});
const { verified, keyID } = verificationResult.signatures[0];
try {
await verified; // throws on invalid signature
//console.log("Signed by key id " + keyID.toHex());
return KeyId.toHex().alias == alias;
} catch (e) {
console.log("Signature could not be verified: " + e.message);
return false;
}
};
apx.crypto.sign = async (message, privateKey) => {
privateKey = await openpgp.readPrivateKey(
{

View File

@@ -14,7 +14,7 @@
"apxauthscreensignup": "apxtri/objects/wco/apxauth/screensignup",
"apxauthscreensignin": "apxtri/objects/wco/apxauth/screensignin",
"apxauthscreenlogout": "apxtri/objects/wco/apxauth/screenlogout",
"apxauthscreenmytribes": "apxtri/objects/wco/apxauth/screenmytribes",
"apxauthscreenmyworld": "apxtri/objects/wco/apxauth/screenmyworld",
"apxauthscreeninformation": "apxtri/objects/wco/apxauth/screeninformation",
"apxauthscreenforgetkey": "apxtri/objects/wco/apxauth/screenforgetkey"
},

View File

@@ -0,0 +1,66 @@
<!DOCTYPE html>
<html lang="fr" data-theme="apxtridark" class="h-full bg-base-200 text-neutral-content ">
<head>
<meta charset="utf-8" />
<title>Mon profil</title>
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
<meta
content="L'unique et sa propriété, authentification, apxtri, cle public, cle privée"
name="keywords"
/>
<meta
content="Porte d'entrée dans l'univers libre d'apXtri, là où vous pouvez être l'Unique et sa propriété."
name="description"
/>
<link data-wco="favicon" href="static/img/icons/iconbgdark.png" rel="icon" />
<!--script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script-->
<link href="static/css/output.css" rel="stylesheet" />
<script>
/**
* Read apx.js to know more
*/
const apxtri = {
headers: {
xtrkversion: 1,
xtribe: "apxtri",
xapp: "admin",
xlang: "fr",
xalias: "anonymous",
xhash: "anonymous",
xprofils:["anonymous"],
xdays: 0,
xuuid:0
},
pagename: "myprofil",
pageauth: "apxid",
wcoobserver:true,
allowedprofils:["anonymous"],
version:0
};
</script>
<script src="/apxtrilib/axios/dist/axios.min.js"></script>
<script src="/apxtrilib/dayjs/dayjs.min.js"></script>
<script src="/apxtrilib/openpgp/dist/openpgp.min.js"></script>
<script src="/apxtrilib/mustache/mustache.min.js"></script>
<script src="/apxtrilib/qr-code-styling/lib/qr-code-styling.js"></script>
<script src="/apxtrilib/checkjson.js"></script>
<script src="/api/apxtri/wwws/getwco/apx.js?wcotribe=apxtri&tribe=apxtri&xapp=admin&pagename=apxid&code=enjoy"></script>
<script src="/api/apxtri/wwws/getwco/simplemobnav.js?wcotribe=apxtri&tribe=apxtri&xapp=admin&pagename=apxid&code=enjoy&tagid=mydata"></script>
</head>
<body class="h-full">
<div class="flex items-center justify-center min-h-screen px-4">
<div
id="mydata"
wco-name="simplemobnav"
class="bg-base-100 min-h-screen w-full p-4 text-center">
</div>
<!--div wco-name="chatroom" class="hidden min-h-full flex-col justify-center px-6 py-12 lg:px-8">
</div-->
</div>
</body>
</html>

View File

@@ -17,7 +17,9 @@
src: url(../fonts/Quicksand-Light.ttf) format('ttf');
}
@import "tailwindcss" source("../../../src/**/*.{html,js,mustache}");
/*@import "tailwindcss" source("../../.{html,js,mustache}");
*/
@import "tailwindcss" source("/media/phil/usbfarm/apxtowns/data/apxtri/objects/wwws/admin/src/**/*.{html,js,mustache}");
@import "./sourcetw.css";
@plugin "daisyui";

File diff suppressed because it is too large Load Diff

View File

@@ -18,7 +18,7 @@
"profilmenu": [
{
"mainprofil": "persons",
"link": "mytribes"
"link": "myworld"
},
{
"mainprofil": "pagans",
@@ -108,10 +108,10 @@
"next": []
},
{
"link": "mytribes",
"shortlabel": "Tribus",
"label": "Mes tribus",
"allowedprofil":["persons"],
"link": "myworld",
"shortlabel": "Ma chose",
"label": "Ma propriété",
"allowedprofil":["pagans"],
"textlink": "Voir ",
"action":"navigation",
"next": ["logout"]

View File

@@ -0,0 +1,113 @@
{
"contentwconame": "apxauth",
"contentid": "signature",
"logo": {
"src": "/src/static/img/logo/logobgdark.png",
"alt": "smatchit"
},
"claim": {
"textContent": "Never miss an opportunity"
},
"textlist": true,
"commentmenutype": "textlist: vertical list of menu with texte, buttonlist: horizontal btn",
"profilmenu": [
{
"mainprofil": "persons",
"link": "mytribes"
},
{
"mainprofil": "pagans",
"link": "logout"
},
{
"mainprofil": "anonymous",
"link": "signin"
}
],
"links": [
{
"link": "signup",
"label": "Pas encore d'identité apxtri ?",
"textlink": "Créer mon identité",
"tpl": "apxauthscreensignup",
"allowedprofil": [
"anonymous"
],
"next": [
"signin",
"forgetkey",
"information"
]
},
{
"link": "signin",
"label": "S'identifier ?",
"textlink": "Accédez à vos données",
"tpl": "apxauthscreensignin",
"allowedprofil": [
"anonymous"
],
"next": [
"signup",
"forgetkey",
"information"
]
},
{
"link": "forgetkey",
"label": "Clé oubliée ?",
"textlink": "Récupérez par email",
"tpl": "apxauthscreenforgetkey",
"allowedprofil": [
"anonymous"
],
"next": [
"signin",
"signup",
"information"
]
},
{
"link": "information",
"label": " C'est quoi une identité apxtri ?",
"textlink": "En savoir plus",
"allowedprofil": [
"anonymous"
],
"tpl": "apxauthscreeninformation",
"next": [
"back"
]
},
{
"link": "back",
"label": "Retour au menu ",
"allowedprofil": [
"anonymous"
],
"tpl": "sc",
"textlink": "Retour",
"next": []
},
{
"link": "logout",
"label": " ",
"allowedprofil": [
"pagans"
],
"tpl": "apxauthscreenlogout",
"textlink": "",
"next": []
},
{
"link": "mytribes",
"label": " ",
"tpl": "apxauthscreenmytribes",
"allowedprofil": [
"persons"
],
"textlink": "",
"next": []
}
]
}

View File

@@ -1,4 +1,5 @@
{ "idparent":"authentification",
{
"idparent": "authentification",
"signintitle": "Qui êtes-vous?",
"signuptitle": "Creer un compte anonyme",
"aliastitle": "Votre alias",
@@ -13,5 +14,33 @@
"downloadPuK": " Download <br />Publickey",
"downloadPrK": " Download <br />Privatekey",
"saveidentity": "Sauvegarde cette identité",
"nextpage":"Page suivante"
"nextpage": "Page suivante",
"optionlinksmajor":[ {
"notification_count": 5,
"typebadge": "success",
"svg": "<svg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='currentColor' class='size-6'> <path stroke-linecap='round' stroke-linejoin='round' d='M10.5 6h9.75M10.5 6a1.5 1.5 0 1 1-3 0m3 0a1.5 1.5 0 1 0-3 0M3.75 6H7.5m3 12h9.75m-9.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-3.75 0H7.5m9-6h3.75m-3.75 0a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m-9.75 0h9.75' /></svg>",
"title": "Accéder à l'administration de la ville",
"onclick": " href='admindata_fr.html' "
}],
"optionlinks": [
{
"notification_count": 1,
"typebadge": "success",
"svg":"<svg class='w-10 h-10 text-base-content' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' fill='currentColor' ><path d='M97.6 214.8h2.3a2159.5 2159.5 0 0 1 24.2 0 2976.5 2976.5 0 0 0 38-.2h2.2c4.4 0 7.2.7 10.7 3.4 2.4 3.7 2.3 5.4 2.3 9.7v9.1a5200 5200 0 0 0 0 18.5v11.2a13324.6 13324.6 0 0 1 .2 77.7 3051.3 3051.3 0 0 0 0 38.8v3.8c-.6 3.8-1.7 5.5-4.5 8.2-3.4 1-3.4 1-7 1a54.1 54.1 0 0 1-11.2-9l-1.5-1.4a1543.7 1543.7 0 0 1-17.7-17.7l-9.8-9.9a20275.3 20275.3 0 0 1-74.5-74.6l-4.6-4.6-2.6-2.6c-2.6-2.8-4-4.6-4.7-8.4.6-4 1-4.6 3.6-7.4l1.9-2.2c3.7-4 7.6-7.8 11.4-11.7l2.7-2.6a5470.5 5470.5 0 0 1 19.2-19.3l2.5-2.6 2.4-2.3 2-2.1c3.8-3.2 7.9-2.8 12.5-2.8ZM216.6 345.9a238272208 238272208 0 0 0 62-.1 12532.8 12532.8 0 0 0 85.8-.2 628.2 628.2 0 0 1 10.4 0c3.5.4 5.4 1.3 8.2 3.4 1.9 2.5 2 3.7 1.8 6.8-1 4-2.6 5.7-5.6 8.6l-1.5 1.5-5 5a2949 2949 0 0 0-13.6 13.5l-10.3 10.3a9057.4 9057.4 0 0 1-41.8 41.6 27411 27411 0 0 1-41.1 41l-2.7 2.7a11.1 11.1 0 0 1-9.1 3.6c-10-2.8-21-18.3-28.1-25.4a3170 3170 0 0 0-12.3-12.3l-2.2-2.2-2.1-2-1.9-2c-3.7-4.2-3.8-8-3.8-13.6v-2.4a1220.2 1220.2 0 0 1 0-24.8 2068.7 2068.7 0 0 0-.2-31.3v-9.8c0-4.9 1-7.4 4.5-10.8 2.9-1.4 5.4-1.1 8.6-1.1ZM259 51c6.4 4.6 12 10.8 17.5 16.4l2.6 2.6A5839.7 5839.7 0 0 1 301 92l2.3 2.3 2.1 2c3.2 3.6 2.7 7 2.7 11.5v2.4a2459.5 2459.5 0 0 1 0 24.9 4177 4177 0 0 0 .2 41.3c0 6.8 0 6.8-2.3 9.7-3.6 2.3-6.7 2.3-11 2.3h-9a5189.6 5189.6 0 0 0-18.6 0h-11.3a13928.8 13928.8 0 0 1-78.2 0 4265 4265 0 0 0-39 0h-3.8c-3.4-.3-4.7-.9-7.1-3.3-1-3.3-1-3.3-1-7 2.5-4.3 5.5-7.8 9-11.3l1.5-1.5a1601.7 1601.7 0 0 1 18-18l10.1-10a21005.6 21005.6 0 0 1 76-75.9l4.6-4.7L249 54c3.4-3.2 5.5-3.7 10.1-3ZM348 139c2.7 2 2.7 2 5.4 4.8l1.6 1.5a682.9 682.9 0 0 1 8.7 8.7l10 10 8.2 8.2a8423.8 8423.8 0 0 1 39.7 39.6 5758 5758 0 0 1 48.5 48.4c2.4 3.5 2.4 5.6 1.9 9.8-1.2 2.1-1.2 2.1-3 3.8l-1.9 2-2.1 2.2-2.2 2.2c-2.3 2.5-4.7 4.9-7.2 7.3l-2.6 2.6A5839.7 5839.7 0 0 1 431 312l-2.3 2.3-2 2.1c-3.6 3.2-7 2.8-11.6 2.8H402a6035.4 6035.4 0 0 1-54 .3h-2.3c-3.5 0-5.3-.2-8.1-2.4-2.8-3.7-2.7-6-2.7-10.7v-2.1a2222.5 2222.5 0 0 1-.2-34 21694.8 21694.8 0 0 1-.2-94.5 1746.5 1746.5 0 0 1 0-24.8v-3.8c.6-3.8 1.7-5.5 4.5-8.2 3.6-1.2 5.3-1 9 0ZM218.6 214.9h2.7a3102.4 3102.4 0 0 1 28 0 5270.3 5270.3 0 0 0 43.8-.1h2.6c7.3 0 7.3 0 10.3 2.2 2.6 4 2.3 7.3 2.3 11.9v2.7a1551.6 1551.6 0 0 1 .1 28.5 2352.9 2352.9 0 0 0 .2 36v11.3c0 4.1-.3 6.1-2.6 9.6-4.1 2.7-7.3 2.7-12.1 2.6H291a694.7 694.7 0 0 1-15.2 0 1867.7 1867.7 0 0 1-30 0 1797.5 1797.5 0 0 1-27.8 0h-2.6c-4 0-6-.3-9.5-2.6-2.7-4.1-2.7-7.3-2.6-12.1V302a708.4 708.4 0 0 1 0-15.3 1897.8 1897.8 0 0 1 0-30 2184 2184 0 0 1 0-27.8v-2.6c.1-5.8.1-5.8 2.5-8.9 4.1-3 7.8-2.6 12.7-2.6Z'/></svg>",
"title": "Accéder à vos messages chiffrés",
"onclick": " href='privatri_fr.html' "
},
{
"notification_count": 1,
"typebadge": "success",
"svg": "<svg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='currentColor' class='size-6'> <path stroke-linecap='round' stroke-linejoin='round' d='m21 7.5-2.25-1.313M21 7.5v2.25m0-2.25-2.25 1.313M3 7.5l2.25-1.313M3 7.5l2.25 1.313M3 7.5v2.25m9 3 2.25-1.313M12 12.75l-2.25-1.313M12 12.75V15m0 6.75 2.25-1.313M12 21.75V19.5m0 2.25-2.25-1.313m0-16.875L12 2.25l2.25 1.313M21 14.25v2.25l-2.25 1.313m-13.5 0L3 16.5v-2.25' /></svg>",
"title": "Accéder à mon wallet",
"onclick": " href='wallet_fr.html' "
},
{
"svg": "<svg class='w-10 h-10 text-base-content' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='currentColor'><path stroke-linecap= 'round' stroke-linejoin='round' d='M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.33 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z' /></svg>",
"title": "Accéder à mon profil",
"onclick": " href='myprofil_fr.html' "
}
]
}

View File

@@ -4,6 +4,16 @@
"servers": {
"apx.apxtri.farm.ants": {
"listen": [":80",":443"],
"tls_connection_policies": [
{
"match": {
"sni": ["apx.apxtri.farm.ants"]
},
"certificates": {
"load_storage": "local_certs"
}
}
],
"routes": [
{
"match": [{

View File

@@ -1,123 +1,41 @@
{
"appname": "admin",
"dns": [],
"commonfiles": [
"static/fonts/questrial-regular-webfont.woff2",
"static/fonts/Quicksand-Light.woff2",
"static/img/icons/iconbgdark.png",
"static/img/icons/iconbglight.png",
"static/img/logo/logobgdark.png"
],
"apxtri": {
"headers": {
"xtrkversion": 1,
"xalias": "anonymous",
"xapp": "admin",
"xdays": 0,
"xhash": "anonymous",
"xlang": "fr",
"xprofils": "anonymous",
"xtribe": "apxtri",
"xuuid": "0"
}
},
"tailwindcsscontent": [
"../../../../../../../apxtri/objects/wco/apx/*.{html,js,mustache}",
"../../../../../../../apxtri/objects/wwws/admin/src/**/*.{html,js,mustache}",
"../../../../../../../apxtri/objects/wco/simplemobnav/*.{html,js,mustache}",
"../../../../../../../apxtri/objects/wco/apxauth/*.{html,js,mustache}",
"../../../../../../../apxtri/objects/wco/adminskull/*.{html,js,mustache}",
"/media/phil/usbfarm/apxtowns/data/apxtri/objects/wco/apx/*.{html,js,mustache}",
"/media/phil/usbfarm/apxtowns/data/apxtri/objects/wwws/admin/src/**/*.{html,js,mustache}",
"/media/phil/usbfarm/apxtowns/data/apxtri/objects/wco/simplemobnav/*.{html,js,mustache}",
"/media/phil/usbfarm/apxtowns/data/apxtri/objects/wco/apxauth/*.{html,js,mustache}"
],
"pages": {
"testapi": {
"version": 1,
"languages": [
"fr"
],
"profils": [
"anonymous"
],
"tpl": {},
"tpldata": {},
"itms": {},
"ref": {
"Checkjson": "apxtri/models/tplstrings/Checkjson",
"Notification": "apxtri/models/tplstrings/Notifications",
"Odmdb": "apxtri/models/tplstrings/Odmdb",
"Pagans": "apxtri/models/tplstrings/Pagans",
"Middlewares": "apxtri/models/tplstrings/middlewares"
},
"schema": [
"apxtri/objects/pagans",
"apxtri/objects/persons"
],
"options": {
"profil": "apxtri/objects/options/profil"
},
"wcodata": {
"favicon": {
"href": "static/img/icons/iconbglight.png"
},
"logo": {
"src": "static/img/logo/logobgdark.png",
"alt": "apXtri"
},
"claim": {
"textContent": "L'Unique et sa propriété"
}
},
"appdata": {
"emailsupport": "support@need-data.com"
}
},
"apxid": {
"version": 1,
"languages": [
"fr"
],
"profils": [
"anonymous"
],
"tpl": {
"simplemobnavnav": "apxtri/objects/wco/simplemobnav/nav.mustache",
"simplemobnavmain": "apxtri/objects/wco/simplemobnav/main.mustache",
"apxauthmain": "apxtri/objects/wco/apxauth/main",
"apxauthscreensignup": "apxtri/objects/wco/apxauth/screensignup",
"apxauthscreensignin": "apxtri/objects/wco/apxauth/screensignin",
"apxauthscreenlogout": "apxtri/objects/wco/apxauth/screenlogout",
"apxauthscreenmytribes": "apxtri/objects/wco/apxauth/screenmytribes",
"apxauthscreenmyworld": "apxtri/objects/wco/apxauth/screenmyworld",
"apxauthscreeninformation": "apxtri/objects/wco/apxauth/screeninformation",
"apxauthscreenforgetkey": "apxtri/objects/wco/apxauth/screenforgetkey",
"apxauthmain": "apxtri/objects/wco/apxauth/main",
"simplemobnavbuttongroup": "apxtri/objects/wco/simplemobnav/buttongroup.mustache",
"simplemobnavnavbuttonh": "apxtri/objects/wco/simplemobnav/navbuttonh.mustache",
"simplemobnavnavlist": "apxtri/objects/wco/simplemobnav/navlist.mustache",
"simplemobnavnavbutton": "apxtri/objects/wco/simplemobnav/navbuttonh.mustache"
"simplemobnavnavbutton": "apxtri/objects/wco/simplemobnav/navbuttonh.mustache",
"simplemobnavmain": "apxtri/objects/wco/simplemobnav/main.mustache"
},
"tpldata": {
"apxid_signature_apxauth": "apxtri/objects/wwws/admin/src/tpldata/apxid_signature_apxauth",
"apxid_authentification_simplemobnav": "apxtri/objects/wwws/admin/src/tpldata/apxid_authentification_simplemobnav",
"apxid_signature_apxauth": "apxtri/objects/wwws/admin/src/tpldata/apxid_signature_apxauth"
},
"itms": {},
"ref": {
"Checkjson": "apxtri/models/tplstrings/Checkjson",
"Middlewares": "apxtri/models/tplstrings/Middlewares",
"Notification": "apxtri/models/tplstrings/Notifications",
"Odmdb": "apxtri/models/tplstrings/Odmdb",
"Pagans": "apxtri/models/tplstrings/Pagans",
"Persons": "apxtri/models/tplstrings/Persons"
"apxid_mydata_simplemobnav": "apxtri/objects/wwws/admin/src/tpldata/apxid_mydata_simplemobnav"
},
"schema": [
"apxtri/objects/pagans",
"apxtri/objects/persons"
],
"options": {
"profil": "apxtri/objects/options/itm/profil"
"ref": {
"Odmdb": "apxtri/models/tplstrings/Odmdb",
"Pagans": "apxtri/models/tplstrings/Pagans",
"Persons": "apxtri/models/tplstrings/Persons",
"Checkjson": "apxtri/models/tplstrings/Checkjson",
"Notification": "apxtri/models/tplstrings/Notifications",
"Middlewares": "apxtri/models/tplstrings/Middlewares"
},
"wcodata": {
"wco": {
"favicon": {
"href": "static/img/icons/iconbglight.png"
},
@@ -129,31 +47,10 @@
"textContent": "L'Unique et sa propriété"
}
},
"appdata": {
"emailsupport": "support@smatchit.io",
"websites": [
{
"href": "https://app.smatchit.io",
"name": "app.smatchit.io"
},
{
"href": "https://apptest.smatchit.io",
"name": "apptest.smatchit.io"
},
{
"href": "http://pwa.smatchit/src/testapi_fr.html",
"name": "pwa.smatchit/src/testapi"
}
],
"nopassphrase": true,
"forcetrustcurrenttribe": true
}
"appdata": {}
},
"admindata": {
"version": 1,
"languages": [
"fr"
],
"profils": [
"anonymous"
],
@@ -163,57 +60,18 @@
"adminskullmain": "apxtri/objects/wco/adminskull/main",
"adminskullheadnav": "apxtri/objects/wco/adminskull/headnav"
},
"tpldata": {
"verticalnav": "apxtri/objects/wwws/admin/src/tpldata/admindata/verticalnav",
"headnav": "apxtri/objects/wwws/admin/src/tpldata/admindata/headnav",
"simplemobnav": "../apxtri/objects/wwws/admin/src/tpldata/simplemobnav/simplemobnav"
},
"itms": {},
"ref": {
"Checkjson": "apxtri/models/tplstrings/Checkjson",
"Notification": "apxtri/models/tplstrings/Notifications",
"Odmdb": "apxtri/models/tplstrings/Odmdb",
"Pagans": "apxtri/models/tplstrings/Pagans",
"Middlewares": "apxtri/models/tplstrings/middlewares",
"Persons": "apxtri/models/tplstrings/Persons"
},
"tpldata": {},
"schema": [
"apxtri/objects/pagans",
"apxtri/objects/persons"
],
"options": {
"profil": "apxtri/objects/options/profil"
},
"wcodata": {
"favicon": {
"href": "static/img/icons/iconbglight.png"
},
"logo": {
"src": "static/img/logo/logobgdark.png",
"alt": "apXtri"
},
"claim": {
"textContent": "L'Unique et sa propriété"
}
},
"appdata": {
"emailsupport": "support@smatchit.io",
"websites": [
{
"href": "https://app.smatchit.io",
"name": "app.smatchit.io"
},
{
"href": "https://apptest.smatchit.io",
"name": "apptest.smatchit.io"
},
{
"href": "http://pwa.smatchit/src/testapi_fr.html",
"name": "pwa.smatchit/src/testapi"
}
],
"nopassphrase": true,
"forcetrustcurrenttribe": true
"ref": {
"Checkjson": "apxtri/models/tplstrings/Checkjson",
"Notification": "apxtri/models/tplstrings/Notifications",
"Middlewares": "apxtri/models/tplstrings/Middlewares",
"Odmdb": "apxtri/models/tplstrings/Odmdb",
"Pagans": "apxtri/models//tplstrings/Pagans",
"Persons": "apxtri/models/tplstrings/Persons"
}
}
}