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 = {}; if (!apx.wco) apx.wco = {};
console.log( console.log(
"wco dynamic into the webpage", "wco dynamic into the webpage",
apx.wco, apx.data.wco,
"no propertie to add:", "no propertie to add:",
!newpropertie !newpropertie
); );
@@ -217,13 +217,19 @@ apx.listendatawco = (newpropertie) => {
const elements = document.querySelectorAll(`[data-wco='${p}']`); const elements = document.querySelectorAll(`[data-wco='${p}']`);
elements.forEach((e) => actionprop(apx.data.wco[p], e)); elements.forEach((e) => actionprop(apx.data.wco[p], e));
//console.log(p, Object.hasOwnProperty(apx.wco)); //console.log(p, Object.hasOwnProperty(apx.wco));
if (Object.hasOwnProperty(apx.wco)) { if (!apx.data.wco.hasOwnProperty(p)) {
Object.defineProperty(apx.wco, p, { let _val = apx.data.wco[p]; // Stocke la valeur initiale
Object.defineProperty(apx.data.wco, p, {
get: () => _val,
set: (newv) => { 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)); 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"); console.log("WARNING!!, local apxtri.wco was erase by updatelocaldb.wco");
}*/ }*/
Object.keys(initset.data.data).forEach((k) => { Object.keys(initset.data.data).forEach((k) => {
if (k != "headers") { if (k !== "headers") {
apx.data[k] = initset.data.data[k]; apx.data[k] = initset.data.data[k];
} }
}); });

View File

@@ -2,7 +2,7 @@ var apx = apx || {};
apx.apxauth = {}; apx.apxauth = {};
apx.apxauth.loadwco = async (id, ctx) => { apx.apxauth.loadwco = async (id, ctx) => {
// check if not authenticate, do nothing cause by default screensignin and wait authentification // 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(); // if (dayjs(apx.data.headers.xdays).diff(dayjs(), "hours") >= 24) apx.apxauth.checkisauth();
//load main.mustache of the component //load main.mustache of the component
//when wco-xxx change it run this function //when wco-xxx change it run this function
@@ -35,7 +35,7 @@ apx.apxauth.getdata = (id, ctx) => {
? apx.data.appdata.emailsupport ? apx.data.appdata.emailsupport
: ""; : "";
switch (ctx.link) { switch (ctx.link) {
case "logout": case "myworld":
if (!data.profils) data.profils = []; if (!data.profils) data.profils = [];
apx.data.headers.xprofils.forEach((p) => { apx.data.headers.xprofils.forEach((p) => {
if (!["anonymous", "pagans", "persons"].includes(p)) { if (!["anonymous", "pagans", "persons"].includes(p)) {
@@ -45,15 +45,47 @@ apx.apxauth.getdata = (id, ctx) => {
data.noprofils = data.profils.length == 0; data.noprofils = data.profils.length == 0;
data.member = apx.data.headers.xprofils.includes("persons"); data.member = apx.data.headers.xprofils.includes("persons");
data.websites = apx.data.appdata.websites; data.websites = apx.data.appdata.websites;
// get tribes activities data.optionlinks=apx.data.tpldata[tpldataname].optionlinks
/*["", "https://wall-ants.ndda.fr"]; 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 axios
.get(`/api/apxtri/tribes/activities`, { .get(`/api/apxtri/odmdb/idx/apxtri/towns/towns`, {
headers: apx.data.headers, headers: apx.data.headers,
}) })
.then((rep) => {}) .then((rep) => {
.catch((err) => {}); 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; break;
default: default:
break; break;
@@ -253,7 +285,7 @@ apx.apxauth.authentifyme = async (
//location.reload(); //location.reload();
document document
.getElementById(idparent) .getElementById(idparent)
.setAttribute("wco-link", "mytribes"); .setAttribute("wco-link", "myworld");
} }
}) })
.catch((err) => { .catch((err) => {
@@ -484,7 +516,7 @@ apx.apxauth.authenticatedetachedSignature = async (
message message
) => { ) => {
/** /**
* Check that alias (pubkey) signe a message * Check that alias (pubkey) sign a message
* @alias {string} alias link to the publickey * @alias {string} alias link to the publickey
* @pubK {string} publiKey text format * @pubK {string} publiKey text format
* @detachedSignature {string} a detachedsignatured get from apx.apxauth.detachedSignature * @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 = apx.crypto || {};
apx.crypto.genKey = async (uuid) => { apx.crypto.genKey = async (uuid) => {
return await openpgp.generateKey( return await openpgp.generateKey({
{ type: "ecc",
type: "ecc", curve: "curve25519",
curve: "curve25519", userIDs: [
userIDs: [ {
{ alias: uuid,
alias: uuid },
} ],
], passphrase: "",
passphrase: "", format: "armored",
format: "armored", });
}
);
}; };
apx.crypto.encryptMessage = async (message, publicKey) => { apx.crypto.encryptMessage = async (message, publicKey) => {
publicKey = await openpgp.readKey( publicKey = await openpgp.readKey({
{ armoredKey: publicKey,
armoredKey: publicKey });
}
);
return await openpgp.encrypt( return await openpgp.encrypt({
{ message: await openpgp.createMessage({
message: await openpgp.createMessage( text: message,
{ }),
text: message encryptionKeys: publicKey,
} });
),
encryptionKeys: publicKey
}
);
}; };
apx.crypto.decryptMessage = async (encryptedMessage, privateKey) => { apx.crypto.decryptMessage = async (encryptedMessage, privateKey) => {
privateKey = await openpgp.readPrivateKey( privateKey = await openpgp.readPrivateKey({
{ armoredKey: privateKey,
armoredKey: privateKey });
}
);
const message = await openpgp.readMessage( const message = await openpgp.readMessage({
{ armoredMessage: encryptedMessage,
armoredMessage: encryptedMessage });
}
);
return await openpgp.decrypt( return await openpgp.decrypt({
{ message,
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) => { apx.crypto.sign = async (message, privateKey) => {
privateKey = await openpgp.readPrivateKey( privateKey = await openpgp.readPrivateKey(
{ {

View File

@@ -14,7 +14,7 @@
"apxauthscreensignup": "apxtri/objects/wco/apxauth/screensignup", "apxauthscreensignup": "apxtri/objects/wco/apxauth/screensignup",
"apxauthscreensignin": "apxtri/objects/wco/apxauth/screensignin", "apxauthscreensignin": "apxtri/objects/wco/apxauth/screensignin",
"apxauthscreenlogout": "apxtri/objects/wco/apxauth/screenlogout", "apxauthscreenlogout": "apxtri/objects/wco/apxauth/screenlogout",
"apxauthscreenmytribes": "apxtri/objects/wco/apxauth/screenmytribes", "apxauthscreenmyworld": "apxtri/objects/wco/apxauth/screenmyworld",
"apxauthscreeninformation": "apxtri/objects/wco/apxauth/screeninformation", "apxauthscreeninformation": "apxtri/objects/wco/apxauth/screeninformation",
"apxauthscreenforgetkey": "apxtri/objects/wco/apxauth/screenforgetkey" "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'); 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"; @import "./sourcetw.css";
@plugin "daisyui"; @plugin "daisyui";

File diff suppressed because it is too large Load Diff

View File

@@ -18,7 +18,7 @@
"profilmenu": [ "profilmenu": [
{ {
"mainprofil": "persons", "mainprofil": "persons",
"link": "mytribes" "link": "myworld"
}, },
{ {
"mainprofil": "pagans", "mainprofil": "pagans",
@@ -108,10 +108,10 @@
"next": [] "next": []
}, },
{ {
"link": "mytribes", "link": "myworld",
"shortlabel": "Tribus", "shortlabel": "Ma chose",
"label": "Mes tribus", "label": "Ma propriété",
"allowedprofil":["persons"], "allowedprofil":["pagans"],
"textlink": "Voir ", "textlink": "Voir ",
"action":"navigation", "action":"navigation",
"next": ["logout"] "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,17 +1,46 @@
{ "idparent":"authentification", {
"signintitle":"Qui êtes-vous?", "idparent": "authentification",
"signuptitle":"Creer un compte anonyme", "signintitle": "Qui êtes-vous?",
"aliastitle":"Votre alias", "signuptitle": "Creer un compte anonyme",
"aliasinvalid": "Combinaison de 3 à 150 caractères <br /> composée de minuscules (a à z) et/ou de chiffres (0 à 9)", "aliastitle": "Votre alias",
"aliastitle": "Uniquement minuscules ou chiffres", "aliasinvalid": "Combinaison de 3 à 150 caractères <br /> composée de minuscules (a à z) et/ou de chiffres (0 à 9)",
"emailinvalid":"Vérifier votre email", "aliastitle": "Uniquement minuscules ou chiffres",
"privatekeyplaceholder": "Votre clé privée", "emailinvalid": "Vérifier votre email",
"remembermetext":"Stocker mon identité sur ce navigateur plus de 24 heures.Pour supprimer la clé de ce navigateur, il suffit de se déconnecter.", "privatekeyplaceholder": "Votre clé privée",
"authentifyme":"S'identifier", "remembermetext": "Stocker mon identité sur ce navigateur plus de 24 heures.Pour supprimer la clé de ce navigateur, il suffit de se déconnecter.",
"createkey":"Créer mes clés en local", "authentifyme": "S'identifier",
"trusttext":"Si vous faites plus confiance à ce domaine qu'à vous même pour garder vos clés, cochez cette case. Les administrateurs de ce domaine auront accès à vos clés et pourront donc agir en votre nom. L'email ci-dessus sera utilisé pour vous renvoyer vos clés par le domaine de confiance. Dans tous les cas, il est conseillé de telecharger vos clés et de les stocker sur un support fiable non connecté (papier, clé usb)", "createkey": "Créer mes clés en local",
"downloadPuK":" Download <br />Publickey", "trusttext": "Si vous faites plus confiance à ce domaine qu'à vous même pour garder vos clés, cochez cette case. Les administrateurs de ce domaine auront accès à vos clés et pourront donc agir en votre nom. L'email ci-dessus sera utilisé pour vous renvoyer vos clés par le domaine de confiance. Dans tous les cas, il est conseillé de telecharger vos clés et de les stocker sur un support fiable non connecté (papier, clé usb)",
"downloadPrK":" Download <br />Privatekey", "downloadPuK": " Download <br />Publickey",
"saveidentity":"Sauvegarde cette identité", "downloadPrK": " Download <br />Privatekey",
"nextpage":"Page suivante" "saveidentity": "Sauvegarde cette identité",
"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": { "servers": {
"apx.apxtri.farm.ants": { "apx.apxtri.farm.ants": {
"listen": [":80",":443"], "listen": [":80",":443"],
"tls_connection_policies": [
{
"match": {
"sni": ["apx.apxtri.farm.ants"]
},
"certificates": {
"load_storage": "local_certs"
}
}
],
"routes": [ "routes": [
{ {
"match": [{ "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": { "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": { "apxid": {
"version": 1, "version": 1,
"languages": [
"fr"
],
"profils": [ "profils": [
"anonymous" "anonymous"
], ],
"tpl": { "tpl": {
"simplemobnavnav": "apxtri/objects/wco/simplemobnav/nav.mustache", "apxauthmain": "apxtri/objects/wco/apxauth/main",
"simplemobnavmain": "apxtri/objects/wco/simplemobnav/main.mustache",
"apxauthscreensignup": "apxtri/objects/wco/apxauth/screensignup", "apxauthscreensignup": "apxtri/objects/wco/apxauth/screensignup",
"apxauthscreensignin": "apxtri/objects/wco/apxauth/screensignin", "apxauthscreensignin": "apxtri/objects/wco/apxauth/screensignin",
"apxauthscreenlogout": "apxtri/objects/wco/apxauth/screenlogout", "apxauthscreenlogout": "apxtri/objects/wco/apxauth/screenlogout",
"apxauthscreenmytribes": "apxtri/objects/wco/apxauth/screenmytribes", "apxauthscreenmyworld": "apxtri/objects/wco/apxauth/screenmyworld",
"apxauthscreeninformation": "apxtri/objects/wco/apxauth/screeninformation", "apxauthscreeninformation": "apxtri/objects/wco/apxauth/screeninformation",
"apxauthscreenforgetkey": "apxtri/objects/wco/apxauth/screenforgetkey", "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", "simplemobnavnavbuttonh": "apxtri/objects/wco/simplemobnav/navbuttonh.mustache",
"simplemobnavnavlist": "apxtri/objects/wco/simplemobnav/navlist.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": { "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_authentification_simplemobnav": "apxtri/objects/wwws/admin/src/tpldata/apxid_authentification_simplemobnav",
"apxid_signature_apxauth": "apxtri/objects/wwws/admin/src/tpldata/apxid_signature_apxauth" "apxid_mydata_simplemobnav": "apxtri/objects/wwws/admin/src/tpldata/apxid_mydata_simplemobnav"
},
"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"
}, },
"schema": [ "schema": [
"apxtri/objects/pagans", "apxtri/objects/pagans",
"apxtri/objects/persons" "apxtri/objects/persons"
], ],
"options": { "ref": {
"profil": "apxtri/objects/options/itm/profil" "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": { "favicon": {
"href": "static/img/icons/iconbglight.png" "href": "static/img/icons/iconbglight.png"
}, },
@@ -129,31 +47,10 @@
"textContent": "L'Unique et sa propriété" "textContent": "L'Unique et sa propriété"
} }
}, },
"appdata": { "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
}
}, },
"admindata": { "admindata": {
"version": 1, "version": 1,
"languages": [
"fr"
],
"profils": [ "profils": [
"anonymous" "anonymous"
], ],
@@ -163,57 +60,18 @@
"adminskullmain": "apxtri/objects/wco/adminskull/main", "adminskullmain": "apxtri/objects/wco/adminskull/main",
"adminskullheadnav": "apxtri/objects/wco/adminskull/headnav" "adminskullheadnav": "apxtri/objects/wco/adminskull/headnav"
}, },
"tpldata": { "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"
},
"schema": [ "schema": [
"apxtri/objects/pagans", "apxtri/objects/pagans",
"apxtri/objects/persons" "apxtri/objects/persons"
], ],
"options": { "ref": {
"profil": "apxtri/objects/options/profil" "Checkjson": "apxtri/models/tplstrings/Checkjson",
}, "Notification": "apxtri/models/tplstrings/Notifications",
"wcodata": { "Middlewares": "apxtri/models/tplstrings/Middlewares",
"favicon": { "Odmdb": "apxtri/models/tplstrings/Odmdb",
"href": "static/img/icons/iconbglight.png" "Pagans": "apxtri/models//tplstrings/Pagans",
}, "Persons": "apxtri/models/tplstrings/Persons"
"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
} }
} }
} }