From 4a607b05f1cf29d528893e0f73be2153badb6f4e Mon Sep 17 00:00:00 2001 From: Vivien Kraus Date: Fri, 18 Jun 2021 15:39:58 +0200 Subject: Implement the POST method for the server --- doc/webid-oidc.texi | 21 +++ po/fr.po | 322 +++++++++++++++++++--------------- po/webid-oidc.pot | 314 ++++++++++++++++++--------------- src/scm/webid-oidc/errors.scm | 67 +++++++ src/scm/webid-oidc/server/Makefile.am | 6 + src/scm/webid-oidc/server/create.scm | 183 +++++++++++++++++++ tests/Makefile.am | 3 +- tests/crud.scm | 80 +++++++++ 8 files changed, 704 insertions(+), 292 deletions(-) create mode 100644 src/scm/webid-oidc/server/create.scm create mode 100644 tests/crud.scm diff --git a/doc/webid-oidc.texi b/doc/webid-oidc.texi index 7d88aa7..8f08485 100644 --- a/doc/webid-oidc.texi +++ b/doc/webid-oidc.texi @@ -1248,6 +1248,27 @@ known @var{cause}). This warning is continuable every time it is raised. If the handler returns, then the group will be considered empty. @end deftp + +@deftp {exception type} &incorrect-containment-triples @var{path} +The client wanted to create or update a resource, and by that it tried +to change the containment triples at @var{path}. +@end deftp + +@deftp {exception type} &unsupported-media-type @var{content-type} +The client wanted to create a resource with the given +@var{content-type}, but it is not accepted, because @var{content-type} +is not recognized as an RDF content type. +@end deftp + +@deftp {exception type} &path-is-auxiliary @var{path} +The client wanted to create a resource that targets an auxiliary +resource, at @var{path}. +@end deftp + +@deftp {exception type} &forbidden @var{path} @var{user} @var{owner} @var{mode} +The @var{user} wanted to do something under @var{path} requiring +@var{mode}, but it is not the @var{owner} and it is forbidden by WAC. +@end deftp @node GNU Free Documentation License @appendix GNU Free Documentation License diff --git a/po/fr.po b/po/fr.po index 7f0897b..9c5810c 100644 --- a/po/fr.po +++ b/po/fr.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: webid-oidc 0.0.0\n" "Report-Msgid-Bugs-To: vivien@planete-kraus.eu\n" -"POT-Creation-Date: 2021-06-17 12:23+0200\n" -"PO-Revision-Date: 2021-06-17 12:24+0200\n" +"POT-Creation-Date: 2021-06-18 16:41+0200\n" +"PO-Revision-Date: 2021-06-18 15:50+0200\n" "Last-Translator: Vivien Kraus \n" "Language-Team: French \n" "Language: fr\n" @@ -126,101 +126,101 @@ msgstr "Utilisation : generate-random [NOMBRE D'OCTETS]\n" msgid "Usage: generate-key [NUMBER OF BITS | CURVE]\n" msgstr "Utilisation : generate-key [NOMBRE DE BITS | COURBE]\n" -#: src/scm/webid-oidc/errors.scm:945 +#: src/scm/webid-oidc/errors.scm:999 msgid "that’s how it is" msgstr "c’est comme ça" -#: src/scm/webid-oidc/errors.scm:950 +#: src/scm/webid-oidc/errors.scm:1004 #, scheme-format msgid "the value ~s is not a base64 string (because ~a)" msgstr "la valeur ~s n’est pas une chaîne base64 (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:953 +#: src/scm/webid-oidc/errors.scm:1007 #, scheme-format msgid "the value ~s is not JSON (because ~a)" msgstr "la valeur ~s n’est pas du JSON (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:956 +#: src/scm/webid-oidc/errors.scm:1010 #, scheme-format msgid "the value ~s is not Turtle (because ~a)" msgstr "la valeur ~s n’est pas du Turtle (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:959 +#: src/scm/webid-oidc/errors.scm:1013 #, scheme-format msgid "the value ~s does not identify an elleptic curve" msgstr "la valeur ~s n’identifie pas une courbe elliptique" -#: src/scm/webid-oidc/errors.scm:964 +#: src/scm/webid-oidc/errors.scm:1018 #, scheme-format msgid "the value ~s does not identify a JWK (because ~a)" msgstr "la valeur ~s n’identifie pas une JWK (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:966 +#: src/scm/webid-oidc/errors.scm:1020 #, scheme-format msgid "the value ~s does not identify a JWK" msgstr "la valeur ~s n’identifie pas une JWK" -#: src/scm/webid-oidc/errors.scm:971 +#: src/scm/webid-oidc/errors.scm:1025 #, scheme-format msgid "the value ~s does not identify a public JWK (because ~a)" msgstr "la valeur ~s n’identifie pas une JWK publique (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:973 +#: src/scm/webid-oidc/errors.scm:1027 #, scheme-format msgid "the value ~s does not identify a public JWK" msgstr "la valeur ~s n’identifie pas une JWK publique" -#: src/scm/webid-oidc/errors.scm:978 +#: src/scm/webid-oidc/errors.scm:1032 #, scheme-format msgid "the value ~s does not identify a private JWK (because ~a)" msgstr "la valeur ~s n’identifie pas une JWK privée (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:980 +#: src/scm/webid-oidc/errors.scm:1034 #, scheme-format msgid "the value ~s does not identify a private JWK" msgstr "la valeur ~s n’identifie pas une JWK privée" -#: src/scm/webid-oidc/errors.scm:985 +#: src/scm/webid-oidc/errors.scm:1039 #, scheme-format msgid "the value ~s does not identify a JWKS (because ~a)" msgstr "la valeur ~s n’identifie pas un JWKS (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:987 +#: src/scm/webid-oidc/errors.scm:1041 #, scheme-format msgid "the value ~s does not identify a JWKS" msgstr "la valeur ~s n’identifie pas un JWKS" -#: src/scm/webid-oidc/errors.scm:990 +#: src/scm/webid-oidc/errors.scm:1044 #, scheme-format msgid "the value ~s does not identify a hash algorithm" msgstr "la valeur ~s n’identifie pas un algorithme de hachage" -#: src/scm/webid-oidc/errors.scm:993 +#: src/scm/webid-oidc/errors.scm:1047 #, scheme-format msgid "the value ~s is not an alist or misses key ~s" msgstr "la valeur ~s n’est pas une alist ou il manque la clé ~s" -#: src/scm/webid-oidc/errors.scm:996 +#: src/scm/webid-oidc/errors.scm:1050 #, scheme-format msgid "the value ~s is not a JWS header (because ~a)" msgstr "la valeur ~s n’est pas un header JWS (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:999 +#: src/scm/webid-oidc/errors.scm:1053 #, scheme-format msgid "the value ~s is not a JWS payload (because ~a)" msgstr "la valeur ~s n’est pas un contenu JWS (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1002 +#: src/scm/webid-oidc/errors.scm:1056 #, scheme-format msgid "the value ~s is not a JWS (because ~a)" msgstr "la valeur ~s n’est pas un JWS (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1005 +#: src/scm/webid-oidc/errors.scm:1059 #, scheme-format msgid "the string ~s cannot be split in 3 parts with ~s" msgstr "la chaîne ~s ne peut pas être découpée en 3 parties avec ~s" -#: src/scm/webid-oidc/errors.scm:1008 +#: src/scm/webid-oidc/errors.scm:1062 #, scheme-format msgid "" "all key candidates failed to verify signature ~s with algorithm ~s and " @@ -229,17 +229,17 @@ msgstr "" "aucune clé candidate n’a pu vérifier la signature ~s avec l’algorithme ~s et " "le contenu ~a (il y en avait ~a : ~s)" -#: src/scm/webid-oidc/errors.scm:1011 +#: src/scm/webid-oidc/errors.scm:1065 #, scheme-format msgid "I cannot decode JWS ~a (because ~a)" msgstr "je n’ai pas pu décoder le JWS encodé par ~a (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1014 +#: src/scm/webid-oidc/errors.scm:1068 #, scheme-format msgid "I cannot encode JWS ~a (because ~a)" msgstr "je n’ai pas pu encoder le JWS ~a (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1017 +#: src/scm/webid-oidc/errors.scm:1071 #, scheme-format msgid "" "the server request unexpectedly failed with code ~a and reason phrase ~s" @@ -247,338 +247,338 @@ msgstr "" "la requête au serveur a échoué de façon inattendue avec un code ~a et une " "raison ~s" -#: src/scm/webid-oidc/errors.scm:1022 +#: src/scm/webid-oidc/errors.scm:1076 #, scheme-format msgid "the header ~a should not have the value ~s" msgstr "l’en-tête ~a ne devrait pas avoir la valeur ~s" -#: src/scm/webid-oidc/errors.scm:1024 +#: src/scm/webid-oidc/errors.scm:1078 #, scheme-format msgid "the header ~a should be present" msgstr "l’en-tête ~a devrait être présent" -#: src/scm/webid-oidc/errors.scm:1027 +#: src/scm/webid-oidc/errors.scm:1081 #, scheme-format msgid "the server response wasn't expected: ~s (because ~a)" msgstr "la réponse du serveur est inattendue : ~s (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1033 +#: src/scm/webid-oidc/errors.scm:1087 #, scheme-format msgid "the value ~s is not an OIDC configuration (because ~a)" msgstr "la valeur ~s n’est pas une configuration OIDC (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1038 +#: src/scm/webid-oidc/errors.scm:1092 #, scheme-format msgid "the webid field is incorrect: ~s" msgstr "le champ webid est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1039 +#: src/scm/webid-oidc/errors.scm:1093 msgid "the webid field is missing" msgstr "le champ webid est manquant" -#: src/scm/webid-oidc/errors.scm:1043 +#: src/scm/webid-oidc/errors.scm:1097 #, scheme-format msgid "the sub field is incorrect: ~s" msgstr "le champ sub est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1044 +#: src/scm/webid-oidc/errors.scm:1098 msgid "the sub field is missing" msgstr "le champ sub est manquant" -#: src/scm/webid-oidc/errors.scm:1048 +#: src/scm/webid-oidc/errors.scm:1102 #, scheme-format msgid "the iss field is incorrect: ~s" msgstr "le champ iss est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1049 +#: src/scm/webid-oidc/errors.scm:1103 msgid "the iss field is missing" msgstr "le champ iss est manquant" -#: src/scm/webid-oidc/errors.scm:1053 +#: src/scm/webid-oidc/errors.scm:1107 #, scheme-format msgid "the aud field is incorrect: ~s" msgstr "le champ aud est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1054 +#: src/scm/webid-oidc/errors.scm:1108 msgid "the aud field is missing" msgstr "le champ aud est manquant" -#: src/scm/webid-oidc/errors.scm:1058 +#: src/scm/webid-oidc/errors.scm:1112 #, scheme-format msgid "the iat field is incorrect: ~s" msgstr "le champ iat est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1059 +#: src/scm/webid-oidc/errors.scm:1113 msgid "the iat field is missing" msgstr "le champ iat est manquant" -#: src/scm/webid-oidc/errors.scm:1063 +#: src/scm/webid-oidc/errors.scm:1117 #, scheme-format msgid "the exp field is incorrect: ~s" msgstr "le champ exp est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1064 +#: src/scm/webid-oidc/errors.scm:1118 msgid "the exp field is missing" msgstr "le champ exp est manquant" -#: src/scm/webid-oidc/errors.scm:1068 +#: src/scm/webid-oidc/errors.scm:1122 #, scheme-format msgid "the cnf/jkt field is incorrect: ~s" msgstr "le champ cnf/jkt est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1069 +#: src/scm/webid-oidc/errors.scm:1123 msgid "the cnf/jkt field is missing" msgstr "le champ cnf/jkt est manquant" -#: src/scm/webid-oidc/errors.scm:1073 +#: src/scm/webid-oidc/errors.scm:1127 #, scheme-format msgid "the client-id field is incorrect: ~s" msgstr "le champ client-id est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1074 +#: src/scm/webid-oidc/errors.scm:1128 msgid "the client-id field is missing" msgstr "le champ client-id est manquant" -#: src/scm/webid-oidc/errors.scm:1078 +#: src/scm/webid-oidc/errors.scm:1132 #: src/scm/webid-oidc/authorization-page-unsafe.scm:133 #, scheme-format msgid "the redirect_uris field is incorrect: ~s" msgstr "le champ redirect_uris est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1079 +#: src/scm/webid-oidc/errors.scm:1133 #: src/scm/webid-oidc/authorization-page-unsafe.scm:134 msgid "the redirect_uris field is missing" msgstr "le champ redirect_uris est manquant" -#: src/scm/webid-oidc/errors.scm:1083 +#: src/scm/webid-oidc/errors.scm:1137 #, scheme-format msgid "the typ field is incorrect: ~s" msgstr "le champ typ est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1084 +#: src/scm/webid-oidc/errors.scm:1138 msgid "the typ field is missing" msgstr "le champ typ est manquant" -#: src/scm/webid-oidc/errors.scm:1088 +#: src/scm/webid-oidc/errors.scm:1142 #, scheme-format msgid "the jwk field is incorrect: ~s (because ~a)" msgstr "le champ jwk est incorrect : ~s (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1090 +#: src/scm/webid-oidc/errors.scm:1144 msgid "the jwk field is missing" msgstr "le champ jwk est manquant" -#: src/scm/webid-oidc/errors.scm:1094 +#: src/scm/webid-oidc/errors.scm:1148 #, scheme-format msgid "the jti field is incorrect: ~s" msgstr "le champ jti est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1095 +#: src/scm/webid-oidc/errors.scm:1149 msgid "the jti field is missing" msgstr "le champ jti est manquant" -#: src/scm/webid-oidc/errors.scm:1099 +#: src/scm/webid-oidc/errors.scm:1153 #, scheme-format msgid "the nonce field is incorrect: ~s" msgstr "le champ nonce est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1100 +#: src/scm/webid-oidc/errors.scm:1154 msgid "the nonce field is missing" msgstr "le champ nonce est manquant" -#: src/scm/webid-oidc/errors.scm:1104 +#: src/scm/webid-oidc/errors.scm:1158 #, scheme-format msgid "the htm field is incorrect: ~s" msgstr "le champ htm est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1105 +#: src/scm/webid-oidc/errors.scm:1159 msgid "the htm field is missing" msgstr "le champ htm est manquant" -#: src/scm/webid-oidc/errors.scm:1109 +#: src/scm/webid-oidc/errors.scm:1163 #, scheme-format msgid "the htu field is incorrect: ~s" msgstr "le champ htu est incorrect : ~s" -#: src/scm/webid-oidc/errors.scm:1110 +#: src/scm/webid-oidc/errors.scm:1164 msgid "the htu field is missing" msgstr "le champ htu est manquant" -#: src/scm/webid-oidc/errors.scm:1112 +#: src/scm/webid-oidc/errors.scm:1166 #, scheme-format msgid "~s is not an access token (because ~a)" msgstr "~s n’est pas un jeton d’accès (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1115 +#: src/scm/webid-oidc/errors.scm:1169 #, scheme-format msgid "~s is not an access token header (because ~a)" msgstr "~s n’est pas un en-tête de jeton d’accès (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1118 +#: src/scm/webid-oidc/errors.scm:1172 #, scheme-format msgid "~s is not an access token payload (because ~a)" msgstr "~s n’est pas un contenu de jeton d’accès (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1121 +#: src/scm/webid-oidc/errors.scm:1175 #, scheme-format msgid "~s is not a DPoP proof (because ~a)" msgstr "~s n’est pas une preuve DPoP (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1124 +#: src/scm/webid-oidc/errors.scm:1178 #, scheme-format msgid "~s is not a DPoP proof header (because ~a)" msgstr "~s n’est pas un en-tête de preuve DPoP (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1127 +#: src/scm/webid-oidc/errors.scm:1181 #, scheme-format msgid "~s is not a DPoP proof payload (because ~a)" msgstr "~s n’est pas un contenu de preuve DPoP (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1130 +#: src/scm/webid-oidc/errors.scm:1184 #, scheme-format msgid "I cannot fetch the issuer configuration of ~a (because ~a)" msgstr "" "je n’ai pas pu récupérer la configuration de l’émetteur ~a (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1137 +#: src/scm/webid-oidc/errors.scm:1191 #, scheme-format msgid "I cannot fetch the JWKS of ~a at ~a (because ~a)" msgstr "je n’ai pas pu récupérer le JWKS de ~a à ~a (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1148 +#: src/scm/webid-oidc/errors.scm:1202 #, scheme-format msgid "the HTTP method is signed for ~s, but ~s was requested" msgstr "la méthode HTTP a été signée pour ~s, mais ~s a été demandé" -#: src/scm/webid-oidc/errors.scm:1151 +#: src/scm/webid-oidc/errors.scm:1205 #, scheme-format msgid "the HTTP uri is signed for ~a, but ~a was requested" msgstr "l’uri HTTP a été signé pour ~a, mais ~a a été demandé" -#: src/scm/webid-oidc/errors.scm:1154 +#: src/scm/webid-oidc/errors.scm:1208 #, scheme-format msgid "the date is ~a, but the DPoP proof is signed in the future at ~a" msgstr "la date est ~a, mais la preuve DPoP a été signée dans le futur à ~a" -#: src/scm/webid-oidc/errors.scm:1158 +#: src/scm/webid-oidc/errors.scm:1212 #, scheme-format msgid "the date is ~a, but the DPoP proof was signed too long ago at ~a" msgstr "" "la date est ~a, mais la preuve DPoP a été signée il y a trop longtemps à ~a" -#: src/scm/webid-oidc/errors.scm:1167 +#: src/scm/webid-oidc/errors.scm:1221 #, scheme-format msgid "the key ~s does not hash to ~a" msgstr "la clé ~s ne donne pas un hash de ~a" -#: src/scm/webid-oidc/errors.scm:1169 +#: src/scm/webid-oidc/errors.scm:1223 #, scheme-format msgid "the key confirmation of ~s failed (because ~a)" msgstr "la confirmation de clé de ~s a échoué (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1171 +#: src/scm/webid-oidc/errors.scm:1225 #, scheme-format msgid "the key confirmation of ~s failed" msgstr "la confirmation de la clé ~s a échoué" -#: src/scm/webid-oidc/errors.scm:1173 +#: src/scm/webid-oidc/errors.scm:1227 #, scheme-format msgid "the jti ~s has already been found (because ~a)" msgstr "le jti ~s a déjà été trouvé (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1176 +#: src/scm/webid-oidc/errors.scm:1230 #, scheme-format msgid "I cannot decode ~s as an access token (because ~a)" msgstr "je n’ai pas pu décoder ~s comme jeton d’accès (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1179 +#: src/scm/webid-oidc/errors.scm:1233 #, scheme-format msgid "I cannot encode ~s as an access token with key ~s (because ~a)" msgstr "" "je n’ai pas pu encoder ~s comme un jeton d’accès avec la clé ~s (parce que " "~a)" -#: src/scm/webid-oidc/errors.scm:1182 +#: src/scm/webid-oidc/errors.scm:1236 #, scheme-format msgid "I cannot decode ~s as a DPoP proof (because ~a)" msgstr "je n’ai pas pu décoder ~s comme preuve DPoP (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1185 +#: src/scm/webid-oidc/errors.scm:1239 #, scheme-format msgid "I cannot encode ~s as a DPoP proof (because ~a)" msgstr "je n’ai pas pu encoder ~s comme une preuve DPoP (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1188 +#: src/scm/webid-oidc/errors.scm:1242 #, scheme-format msgid "I could not fetch a RDF graph at ~a (because ~a)" msgstr "je n’ai pas pu récupérer de graphe RDF à ~a (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1191 +#: src/scm/webid-oidc/errors.scm:1245 #, scheme-format msgid "~s is not a client manifest (because ~a)" msgstr "~s n’est pas un manifeste client (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1194 +#: src/scm/webid-oidc/errors.scm:1248 #, scheme-format msgid "~s does not authorize redirection URI ~a" msgstr "~s n’autorise pas l’URI de redirection ~a" -#: src/scm/webid-oidc/errors.scm:1197 +#: src/scm/webid-oidc/errors.scm:1251 msgid "I cannot serve a public manifest" msgstr "je ne peux pas servir un manifeste public" -#: src/scm/webid-oidc/errors.scm:1199 +#: src/scm/webid-oidc/errors.scm:1253 #, scheme-format msgid "~a does not have a client manifest registration triple" msgstr "~a n’a pas de triplet d’enregistrement de manifeste client" -#: src/scm/webid-oidc/errors.scm:1202 +#: src/scm/webid-oidc/errors.scm:1256 #, scheme-format msgid "the client manifest at ~a is advertised for ~a" msgstr "le manifeste client ~a est publié pour ~a" -#: src/scm/webid-oidc/errors.scm:1205 +#: src/scm/webid-oidc/errors.scm:1259 #, scheme-format msgid "I could not fetch the client manifest of ~a (because ~a)" msgstr "je n’ai pas pu récupérer le manifeste client de ~a (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1208 +#: src/scm/webid-oidc/errors.scm:1262 #, scheme-format msgid "~s is not an authorization code (because ~a)" msgstr "~s n’est pas un code d’autorisation (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1211 +#: src/scm/webid-oidc/errors.scm:1265 #, scheme-format msgid "~s is not an authorization code header (because ~a)" msgstr "~s n’est pas un en-tête de code d’autorisation (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1214 +#: src/scm/webid-oidc/errors.scm:1268 #, scheme-format msgid "~s is not an authorization code payload (because ~a)" msgstr "~s n’est pas un contenu de code d’autorisation (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1217 +#: src/scm/webid-oidc/errors.scm:1271 #, scheme-format msgid "the current time is ~a, and the authorization code expired at ~a" msgstr "" "la date est actuellement ~a, et le code d’autorisation a expiré à la date ~a" -#: src/scm/webid-oidc/errors.scm:1221 +#: src/scm/webid-oidc/errors.scm:1275 #, scheme-format msgid "I cannot decode ~s as an authorization code (because ~a)" msgstr "je n’ai pas pu décoder ~s comme un code d’autorisation (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1224 +#: src/scm/webid-oidc/errors.scm:1278 #, scheme-format msgid "I cannot encode ~s as an authorization code (because ~a)" msgstr "je n’ai pas pu encoder ~s comme un code d’autorisation (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1227 +#: src/scm/webid-oidc/errors.scm:1281 #, scheme-format msgid "there is no such refresh token as ~s" msgstr "il n’y a pas de jeton de rafraîchissement ~s" -#: src/scm/webid-oidc/errors.scm:1230 +#: src/scm/webid-oidc/errors.scm:1284 #, scheme-format msgid "" "the refresh token is bound to a key confirmed as ~s, but it is used with key " @@ -587,45 +587,45 @@ msgstr "" "Le jeton de rafraîchissement est lié à une clé confirmée par ~s, mais il est " "utilisé avec la clé ~s" -#: src/scm/webid-oidc/errors.scm:1233 +#: src/scm/webid-oidc/errors.scm:1287 #, scheme-format msgid "I cannot decode ~s as an ID token (because ~a)" msgstr "je n’ai pas pu décoder ~s comme jeton d’identité (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1236 +#: src/scm/webid-oidc/errors.scm:1290 #, scheme-format msgid "I cannot encode ~s as an ID token (because ~a)" msgstr "je n’ai pas pu encoder ~s comme un jeton d’identité (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1239 +#: src/scm/webid-oidc/errors.scm:1293 #, scheme-format msgid "the grant type ~s is not supported" msgstr "le type d’octroi ~s n’est pas supporté " -#: src/scm/webid-oidc/errors.scm:1242 +#: src/scm/webid-oidc/errors.scm:1296 msgid "there is no authorization code in the request" msgstr "il n’y a pas de code d’autorisation dans la requête" -#: src/scm/webid-oidc/errors.scm:1244 +#: src/scm/webid-oidc/errors.scm:1298 msgid "there is no refresh token in the request" msgstr "il n’y a pas de jeton de rafraîchissement dans la requête" -#: src/scm/webid-oidc/errors.scm:1246 +#: src/scm/webid-oidc/errors.scm:1300 #, scheme-format msgid "~s is not an ID token (because ~a)" msgstr "~s n’est pas un jeton d’identité (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1249 +#: src/scm/webid-oidc/errors.scm:1303 #, scheme-format msgid "~s is not an ID token header (because ~a)" msgstr "~s n’est pas un en-tête de jeton d’identité (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1252 +#: src/scm/webid-oidc/errors.scm:1306 #, scheme-format msgid "~s is not an ID token payload (because ~a)" msgstr "~s n’est pas un contenu de jeton d’identité (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1255 +#: src/scm/webid-oidc/errors.scm:1309 #, scheme-format msgid "" "I couldn’t set the locale to ~s as an approximation of the client locale ~s" @@ -633,12 +633,12 @@ msgstr "" "je n’ai pas pu définir la locale à ~s comme approximation de la locale du " "client ~s" -#: src/scm/webid-oidc/errors.scm:1258 +#: src/scm/webid-oidc/errors.scm:1312 #, scheme-format msgid "~s does not admit ~s as an identity provider" msgstr "~s n’admet pas ~s comme fournisseur d’identité" -#: src/scm/webid-oidc/errors.scm:1261 +#: src/scm/webid-oidc/errors.scm:1315 #, scheme-format msgid "" "~a is neither an identity provider (because ~a) nor a webid (because ~a)" @@ -646,122 +646,152 @@ msgstr "" "~a n’est ni un fournisseur d’identité (parce que ~a) ni un webid (parce que " "~a)" -#: src/scm/webid-oidc/errors.scm:1266 +#: src/scm/webid-oidc/errors.scm:1320 #, scheme-format msgid "the token request failed (because ~a)" msgstr "la requête de jeton a échoué (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1269 +#: src/scm/webid-oidc/errors.scm:1323 #, scheme-format msgid "you don’t have a refresh token for identity ~a certified by ~a in ~s" msgstr "" "vous n’avez pas de jeton de rafraîchissement pour l’identité ~a certifié par " "~a dans ~s" -#: src/scm/webid-oidc/errors.scm:1274 +#: src/scm/webid-oidc/errors.scm:1328 #, scheme-format msgid "all identity provider candidates for ~a failed: ~a" msgstr "tous les candidats de fournisseurs d’identité pour ~a ont échoué : ~a" -#: src/scm/webid-oidc/errors.scm:1278 +#: src/scm/webid-oidc/errors.scm:1332 #, scheme-format msgid "~s failed (because ~a)" msgstr "~s a échoué (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1281 +#: src/scm/webid-oidc/errors.scm:1335 msgid ", " msgstr ", " -#: src/scm/webid-oidc/errors.scm:1283 +#: src/scm/webid-oidc/errors.scm:1337 #, scheme-format msgid "no resource has been found to serve URI path ~s" msgstr "aucune ressource n’a été trouvée pour servir le chemin d’URI ~s" -#: src/scm/webid-oidc/errors.scm:1286 +#: src/scm/webid-oidc/errors.scm:1340 #, scheme-format msgid "no resource has been found to serve URI path ~s, but ~s exists" msgstr "" "aucune ressource n’a été trouvée pour servir le chemin d’URI ~s, mais ~s " "existe" -#: src/scm/webid-oidc/errors.scm:1289 +#: src/scm/webid-oidc/errors.scm:1343 msgid "the root storage cannot be deleted" msgstr "le stockage racine ne peut pas être détruit" -#: src/scm/webid-oidc/errors.scm:1291 +#: src/scm/webid-oidc/errors.scm:1345 #, scheme-format msgid "the container ~s should be emptied before being deleted" msgstr "le conteneur ~s doit être vidé avant d’être détruit" -#: src/scm/webid-oidc/errors.scm:1294 +#: src/scm/webid-oidc/errors.scm:1348 #, scheme-format msgid "the group ~s cannot be fetched (because ~a)" msgstr "le groupe ~s n’a pas pu être récupéré (parce que ~a)" -#: src/scm/webid-oidc/errors.scm:1300 +#: src/scm/webid-oidc/errors.scm:1352 +#, scheme-format +msgid "the containment triples in the request to update ~s are not up to date" +msgstr "" +"les triplets de contention dans la requête pour changer ~s ne sont pas à jour" + +#: src/scm/webid-oidc/errors.scm:1355 +#, scheme-format +msgid "the server cannot process resources with the ~s content-type" +msgstr "" +"le serveur ne peut pas traiter des ressources avec le type de contenu ~s" + +#: src/scm/webid-oidc/errors.scm:1358 +#, scheme-format +msgid "" +"the client wants to create a resource at ~s, which is reserved for an " +"auxiliary resource" +msgstr "" +"le client veut créer une ressource en tant que ~s, qui est réservé pour une " +"ressource auxiliare" + +#: src/scm/webid-oidc/errors.scm:1361 +#, scheme-format +msgid "" +"the operation on ~s by ~s is refused, because it’s not by ~s and the access " +"control forbids the following mode of operation: ~s" +msgstr "" +"l’opération sur ~s par ~s est refusée, parce que ce n’est pas ~s et le " +"contrôle d’accès refuse le mode d’opération suivant : ~s" + +#: src/scm/webid-oidc/errors.scm:1367 msgid "that’s it" msgstr "c’est tout" -#: src/scm/webid-oidc/errors.scm:1304 +#: src/scm/webid-oidc/errors.scm:1371 #, scheme-format msgid "~a and ~a" msgstr "~a et ~a" -#: src/scm/webid-oidc/errors.scm:1307 +#: src/scm/webid-oidc/errors.scm:1374 #, scheme-format msgid "~a, ~a" msgstr "~a, ~a" -#: src/scm/webid-oidc/errors.scm:1311 +#: src/scm/webid-oidc/errors.scm:1378 #, scheme-format msgid "the signature ~a does not match key ~s with payload ~a" msgstr "la signature ~a ne correspond pas à la clé ~s avec le contenu ~a" -#: src/scm/webid-oidc/errors.scm:1314 +#: src/scm/webid-oidc/errors.scm:1381 msgid "there is an undefined variable" msgstr "il y a une variable non définie" -#: src/scm/webid-oidc/errors.scm:1316 +#: src/scm/webid-oidc/errors.scm:1383 #, scheme-format msgid "the origin is ~a" msgstr "l’origine est ~a" -#: src/scm/webid-oidc/errors.scm:1319 +#: src/scm/webid-oidc/errors.scm:1386 #, scheme-format msgid "a message is attached: ~a" msgstr "un message est attaché : ~a" -#: src/scm/webid-oidc/errors.scm:1322 +#: src/scm/webid-oidc/errors.scm:1389 #, scheme-format msgid "the values ~s are problematic" msgstr "les valeurs ~s sont problématiques" -#: src/scm/webid-oidc/errors.scm:1325 +#: src/scm/webid-oidc/errors.scm:1392 msgid "there is a kind and args" msgstr "il y a un type et des arguments" -#: src/scm/webid-oidc/errors.scm:1327 +#: src/scm/webid-oidc/errors.scm:1394 msgid "there is an assertion failure" msgstr "il y a un échec d’assertion" -#: src/scm/webid-oidc/errors.scm:1329 +#: src/scm/webid-oidc/errors.scm:1396 #, scheme-format msgid "the program quits with code ~a" msgstr "le programme quitte avec le code ~a" -#: src/scm/webid-oidc/errors.scm:1332 +#: src/scm/webid-oidc/errors.scm:1399 msgid "the program cannot recover from this exception" msgstr "le programme ne peut pas récupérer après cette exception" -#: src/scm/webid-oidc/errors.scm:1334 +#: src/scm/webid-oidc/errors.scm:1401 msgid "there is an external error" msgstr "il y a une erreur externe" -#: src/scm/webid-oidc/errors.scm:1336 +#: src/scm/webid-oidc/errors.scm:1403 msgid "there is an error" msgstr "il y a une erreur" -#: src/scm/webid-oidc/errors.scm:1338 +#: src/scm/webid-oidc/errors.scm:1405 #, scheme-format msgid "Unhandled exception type ~a." msgstr "Type d’exception non pris en charge ~a." @@ -772,13 +802,13 @@ msgstr "Attention : génération d'une nouvelle paire de clé." #: src/scm/webid-oidc/identity-provider.scm:148 #: src/scm/webid-oidc/reverse-proxy.scm:124 -#: src/scm/webid-oidc/hello-world.scm:31 src/scm/webid-oidc/client.scm:618 +#: src/scm/webid-oidc/hello-world.scm:31 src/scm/webid-oidc/client.scm:619 #: src/scm/webid-oidc/example-app.scm:100 msgid "command-line|version" msgstr "version" #: src/scm/webid-oidc/identity-provider.scm:150 -#: src/scm/webid-oidc/hello-world.scm:33 src/scm/webid-oidc/client.scm:620 +#: src/scm/webid-oidc/hello-world.scm:33 src/scm/webid-oidc/client.scm:621 #: src/scm/webid-oidc/example-app.scm:102 msgid "comand-line|help" msgstr "aide" @@ -812,17 +842,17 @@ msgid "comand-line|token-endpoint-uri" msgstr "uri-terminal-jeton" #: src/scm/webid-oidc/identity-provider.scm:166 -#: src/scm/webid-oidc/hello-world.scm:35 src/scm/webid-oidc/client.scm:630 +#: src/scm/webid-oidc/hello-world.scm:35 src/scm/webid-oidc/client.scm:631 msgid "comand-line|port" msgstr "port" #: src/scm/webid-oidc/identity-provider.scm:168 -#: src/scm/webid-oidc/reverse-proxy.scm:136 src/scm/webid-oidc/client.scm:632 +#: src/scm/webid-oidc/reverse-proxy.scm:136 src/scm/webid-oidc/client.scm:633 msgid "comand-line|log-file" msgstr "fichier-journal" #: src/scm/webid-oidc/identity-provider.scm:170 -#: src/scm/webid-oidc/reverse-proxy.scm:138 src/scm/webid-oidc/client.scm:634 +#: src/scm/webid-oidc/reverse-proxy.scm:138 src/scm/webid-oidc/client.scm:635 msgid "comand-line|error-file" msgstr "fichier-erreur" @@ -974,7 +1004,7 @@ msgstr "" #: src/scm/webid-oidc/identity-provider.scm:267 #: src/scm/webid-oidc/reverse-proxy.scm:210 -#: src/scm/webid-oidc/hello-world.scm:61 src/scm/webid-oidc/client.scm:699 +#: src/scm/webid-oidc/hello-world.scm:61 src/scm/webid-oidc/client.scm:700 #: src/scm/webid-oidc/example-app.scm:143 #, scheme-format msgid "~a version ~a\n" @@ -1010,12 +1040,12 @@ msgstr "Vous devez définir l'URI du terminal de jeton.\n" #: src/scm/webid-oidc/identity-provider.scm:327 #: src/scm/webid-oidc/reverse-proxy.scm:238 -#: src/scm/webid-oidc/hello-world.scm:72 src/scm/webid-oidc/client.scm:737 +#: src/scm/webid-oidc/hello-world.scm:72 src/scm/webid-oidc/client.scm:738 msgid "The port should be a number between 0 and 65535.\n" msgstr "Le port doit être un nombre entre 0 et 65535.\n" #: src/scm/webid-oidc/identity-provider.scm:346 -#: src/scm/webid-oidc/client.scm:748 +#: src/scm/webid-oidc/client.scm:749 #, scheme-format msgid "~a: Internal server error: ~a\n" msgstr "~a : Erreur interne du serveur : ~a\n" @@ -1341,23 +1371,23 @@ msgstr "" " -p PORT, --~a=8080 :\n" " définit le port à lier.\n" -#: src/scm/webid-oidc/client.scm:622 +#: src/scm/webid-oidc/client.scm:623 msgid "comand-line|client-id" msgstr "id-client" -#: src/scm/webid-oidc/client.scm:624 +#: src/scm/webid-oidc/client.scm:625 msgid "comand-line|redirect-uri" msgstr "uri-redirection" -#: src/scm/webid-oidc/client.scm:626 +#: src/scm/webid-oidc/client.scm:627 msgid "comand-line|client-name" msgstr "nom-client" -#: src/scm/webid-oidc/client.scm:628 +#: src/scm/webid-oidc/client.scm:629 msgid "comand-line|client-uri" msgstr "uri-client" -#: src/scm/webid-oidc/client.scm:649 +#: src/scm/webid-oidc/client.scm:650 #, scheme-format msgid "" "Usage: ~a [OPTIONS]...\n" @@ -1452,15 +1482,15 @@ msgstr "" "\n" "Si vous trouvez une erreur dans le programme, envoyez-en un rapport à ~a.\n" -#: src/scm/webid-oidc/client.scm:722 +#: src/scm/webid-oidc/client.scm:723 msgid "You need to set the client ID as an URI.\n" msgstr "Vous devez définir l’identifiant du client comme URI.\n" -#: src/scm/webid-oidc/client.scm:726 +#: src/scm/webid-oidc/client.scm:727 msgid "You need to set the redirect URI.\n" msgstr "Vous devez définir l'URI de redirection.\n" -#: src/scm/webid-oidc/client.scm:730 +#: src/scm/webid-oidc/client.scm:731 msgid "The client URI should be an URI.\n" msgstr "L’URI du client doit être un URI.\n" diff --git a/po/webid-oidc.pot b/po/webid-oidc.pot index 1f9fd31..fc25133 100644 --- a/po/webid-oidc.pot +++ b/po/webid-oidc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: webid-oidc SNAPSHOT\n" "Report-Msgid-Bugs-To: vivien@planete-kraus.eu\n" -"POT-Creation-Date: 2021-06-17 12:23+0200\n" +"POT-Creation-Date: 2021-06-18 16:41+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -122,623 +122,647 @@ msgstr "" msgid "Usage: generate-key [NUMBER OF BITS | CURVE]\n" msgstr "" -#: src/scm/webid-oidc/errors.scm:945 +#: src/scm/webid-oidc/errors.scm:999 msgid "that’s how it is" msgstr "" -#: src/scm/webid-oidc/errors.scm:950 +#: src/scm/webid-oidc/errors.scm:1004 #, scheme-format msgid "the value ~s is not a base64 string (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:953 +#: src/scm/webid-oidc/errors.scm:1007 #, scheme-format msgid "the value ~s is not JSON (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:956 +#: src/scm/webid-oidc/errors.scm:1010 #, scheme-format msgid "the value ~s is not Turtle (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:959 +#: src/scm/webid-oidc/errors.scm:1013 #, scheme-format msgid "the value ~s does not identify an elleptic curve" msgstr "" -#: src/scm/webid-oidc/errors.scm:964 +#: src/scm/webid-oidc/errors.scm:1018 #, scheme-format msgid "the value ~s does not identify a JWK (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:966 +#: src/scm/webid-oidc/errors.scm:1020 #, scheme-format msgid "the value ~s does not identify a JWK" msgstr "" -#: src/scm/webid-oidc/errors.scm:971 +#: src/scm/webid-oidc/errors.scm:1025 #, scheme-format msgid "the value ~s does not identify a public JWK (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:973 +#: src/scm/webid-oidc/errors.scm:1027 #, scheme-format msgid "the value ~s does not identify a public JWK" msgstr "" -#: src/scm/webid-oidc/errors.scm:978 +#: src/scm/webid-oidc/errors.scm:1032 #, scheme-format msgid "the value ~s does not identify a private JWK (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:980 +#: src/scm/webid-oidc/errors.scm:1034 #, scheme-format msgid "the value ~s does not identify a private JWK" msgstr "" -#: src/scm/webid-oidc/errors.scm:985 +#: src/scm/webid-oidc/errors.scm:1039 #, scheme-format msgid "the value ~s does not identify a JWKS (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:987 +#: src/scm/webid-oidc/errors.scm:1041 #, scheme-format msgid "the value ~s does not identify a JWKS" msgstr "" -#: src/scm/webid-oidc/errors.scm:990 +#: src/scm/webid-oidc/errors.scm:1044 #, scheme-format msgid "the value ~s does not identify a hash algorithm" msgstr "" -#: src/scm/webid-oidc/errors.scm:993 +#: src/scm/webid-oidc/errors.scm:1047 #, scheme-format msgid "the value ~s is not an alist or misses key ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:996 +#: src/scm/webid-oidc/errors.scm:1050 #, scheme-format msgid "the value ~s is not a JWS header (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:999 +#: src/scm/webid-oidc/errors.scm:1053 #, scheme-format msgid "the value ~s is not a JWS payload (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1002 +#: src/scm/webid-oidc/errors.scm:1056 #, scheme-format msgid "the value ~s is not a JWS (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1005 +#: src/scm/webid-oidc/errors.scm:1059 #, scheme-format msgid "the string ~s cannot be split in 3 parts with ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1008 +#: src/scm/webid-oidc/errors.scm:1062 #, scheme-format msgid "" "all key candidates failed to verify signature ~s with algorithm ~s and " "payload ~a (there were ~a: ~s)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1011 +#: src/scm/webid-oidc/errors.scm:1065 #, scheme-format msgid "I cannot decode JWS ~a (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1014 +#: src/scm/webid-oidc/errors.scm:1068 #, scheme-format msgid "I cannot encode JWS ~a (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1017 +#: src/scm/webid-oidc/errors.scm:1071 #, scheme-format msgid "" "the server request unexpectedly failed with code ~a and reason phrase ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1022 +#: src/scm/webid-oidc/errors.scm:1076 #, scheme-format msgid "the header ~a should not have the value ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1024 +#: src/scm/webid-oidc/errors.scm:1078 #, scheme-format msgid "the header ~a should be present" msgstr "" -#: src/scm/webid-oidc/errors.scm:1027 +#: src/scm/webid-oidc/errors.scm:1081 #, scheme-format msgid "the server response wasn't expected: ~s (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1033 +#: src/scm/webid-oidc/errors.scm:1087 #, scheme-format msgid "the value ~s is not an OIDC configuration (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1038 +#: src/scm/webid-oidc/errors.scm:1092 #, scheme-format msgid "the webid field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1039 +#: src/scm/webid-oidc/errors.scm:1093 msgid "the webid field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1043 +#: src/scm/webid-oidc/errors.scm:1097 #, scheme-format msgid "the sub field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1044 +#: src/scm/webid-oidc/errors.scm:1098 msgid "the sub field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1048 +#: src/scm/webid-oidc/errors.scm:1102 #, scheme-format msgid "the iss field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1049 +#: src/scm/webid-oidc/errors.scm:1103 msgid "the iss field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1053 +#: src/scm/webid-oidc/errors.scm:1107 #, scheme-format msgid "the aud field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1054 +#: src/scm/webid-oidc/errors.scm:1108 msgid "the aud field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1058 +#: src/scm/webid-oidc/errors.scm:1112 #, scheme-format msgid "the iat field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1059 +#: src/scm/webid-oidc/errors.scm:1113 msgid "the iat field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1063 +#: src/scm/webid-oidc/errors.scm:1117 #, scheme-format msgid "the exp field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1064 +#: src/scm/webid-oidc/errors.scm:1118 msgid "the exp field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1068 +#: src/scm/webid-oidc/errors.scm:1122 #, scheme-format msgid "the cnf/jkt field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1069 +#: src/scm/webid-oidc/errors.scm:1123 msgid "the cnf/jkt field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1073 +#: src/scm/webid-oidc/errors.scm:1127 #, scheme-format msgid "the client-id field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1074 +#: src/scm/webid-oidc/errors.scm:1128 msgid "the client-id field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1078 +#: src/scm/webid-oidc/errors.scm:1132 #: src/scm/webid-oidc/authorization-page-unsafe.scm:133 #, scheme-format msgid "the redirect_uris field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1079 +#: src/scm/webid-oidc/errors.scm:1133 #: src/scm/webid-oidc/authorization-page-unsafe.scm:134 msgid "the redirect_uris field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1083 +#: src/scm/webid-oidc/errors.scm:1137 #, scheme-format msgid "the typ field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1084 +#: src/scm/webid-oidc/errors.scm:1138 msgid "the typ field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1088 +#: src/scm/webid-oidc/errors.scm:1142 #, scheme-format msgid "the jwk field is incorrect: ~s (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1090 +#: src/scm/webid-oidc/errors.scm:1144 msgid "the jwk field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1094 +#: src/scm/webid-oidc/errors.scm:1148 #, scheme-format msgid "the jti field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1095 +#: src/scm/webid-oidc/errors.scm:1149 msgid "the jti field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1099 +#: src/scm/webid-oidc/errors.scm:1153 #, scheme-format msgid "the nonce field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1100 +#: src/scm/webid-oidc/errors.scm:1154 msgid "the nonce field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1104 +#: src/scm/webid-oidc/errors.scm:1158 #, scheme-format msgid "the htm field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1105 +#: src/scm/webid-oidc/errors.scm:1159 msgid "the htm field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1109 +#: src/scm/webid-oidc/errors.scm:1163 #, scheme-format msgid "the htu field is incorrect: ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1110 +#: src/scm/webid-oidc/errors.scm:1164 msgid "the htu field is missing" msgstr "" -#: src/scm/webid-oidc/errors.scm:1112 +#: src/scm/webid-oidc/errors.scm:1166 #, scheme-format msgid "~s is not an access token (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1115 +#: src/scm/webid-oidc/errors.scm:1169 #, scheme-format msgid "~s is not an access token header (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1118 +#: src/scm/webid-oidc/errors.scm:1172 #, scheme-format msgid "~s is not an access token payload (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1121 +#: src/scm/webid-oidc/errors.scm:1175 #, scheme-format msgid "~s is not a DPoP proof (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1124 +#: src/scm/webid-oidc/errors.scm:1178 #, scheme-format msgid "~s is not a DPoP proof header (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1127 +#: src/scm/webid-oidc/errors.scm:1181 #, scheme-format msgid "~s is not a DPoP proof payload (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1130 +#: src/scm/webid-oidc/errors.scm:1184 #, scheme-format msgid "I cannot fetch the issuer configuration of ~a (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1137 +#: src/scm/webid-oidc/errors.scm:1191 #, scheme-format msgid "I cannot fetch the JWKS of ~a at ~a (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1148 +#: src/scm/webid-oidc/errors.scm:1202 #, scheme-format msgid "the HTTP method is signed for ~s, but ~s was requested" msgstr "" -#: src/scm/webid-oidc/errors.scm:1151 +#: src/scm/webid-oidc/errors.scm:1205 #, scheme-format msgid "the HTTP uri is signed for ~a, but ~a was requested" msgstr "" -#: src/scm/webid-oidc/errors.scm:1154 +#: src/scm/webid-oidc/errors.scm:1208 #, scheme-format msgid "the date is ~a, but the DPoP proof is signed in the future at ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1158 +#: src/scm/webid-oidc/errors.scm:1212 #, scheme-format msgid "the date is ~a, but the DPoP proof was signed too long ago at ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1167 +#: src/scm/webid-oidc/errors.scm:1221 #, scheme-format msgid "the key ~s does not hash to ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1169 +#: src/scm/webid-oidc/errors.scm:1223 #, scheme-format msgid "the key confirmation of ~s failed (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1171 +#: src/scm/webid-oidc/errors.scm:1225 #, scheme-format msgid "the key confirmation of ~s failed" msgstr "" -#: src/scm/webid-oidc/errors.scm:1173 +#: src/scm/webid-oidc/errors.scm:1227 #, scheme-format msgid "the jti ~s has already been found (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1176 +#: src/scm/webid-oidc/errors.scm:1230 #, scheme-format msgid "I cannot decode ~s as an access token (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1179 +#: src/scm/webid-oidc/errors.scm:1233 #, scheme-format msgid "I cannot encode ~s as an access token with key ~s (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1182 +#: src/scm/webid-oidc/errors.scm:1236 #, scheme-format msgid "I cannot decode ~s as a DPoP proof (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1185 +#: src/scm/webid-oidc/errors.scm:1239 #, scheme-format msgid "I cannot encode ~s as a DPoP proof (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1188 +#: src/scm/webid-oidc/errors.scm:1242 #, scheme-format msgid "I could not fetch a RDF graph at ~a (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1191 +#: src/scm/webid-oidc/errors.scm:1245 #, scheme-format msgid "~s is not a client manifest (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1194 +#: src/scm/webid-oidc/errors.scm:1248 #, scheme-format msgid "~s does not authorize redirection URI ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1197 +#: src/scm/webid-oidc/errors.scm:1251 msgid "I cannot serve a public manifest" msgstr "" -#: src/scm/webid-oidc/errors.scm:1199 +#: src/scm/webid-oidc/errors.scm:1253 #, scheme-format msgid "~a does not have a client manifest registration triple" msgstr "" -#: src/scm/webid-oidc/errors.scm:1202 +#: src/scm/webid-oidc/errors.scm:1256 #, scheme-format msgid "the client manifest at ~a is advertised for ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1205 +#: src/scm/webid-oidc/errors.scm:1259 #, scheme-format msgid "I could not fetch the client manifest of ~a (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1208 +#: src/scm/webid-oidc/errors.scm:1262 #, scheme-format msgid "~s is not an authorization code (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1211 +#: src/scm/webid-oidc/errors.scm:1265 #, scheme-format msgid "~s is not an authorization code header (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1214 +#: src/scm/webid-oidc/errors.scm:1268 #, scheme-format msgid "~s is not an authorization code payload (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1217 +#: src/scm/webid-oidc/errors.scm:1271 #, scheme-format msgid "the current time is ~a, and the authorization code expired at ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1221 +#: src/scm/webid-oidc/errors.scm:1275 #, scheme-format msgid "I cannot decode ~s as an authorization code (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1224 +#: src/scm/webid-oidc/errors.scm:1278 #, scheme-format msgid "I cannot encode ~s as an authorization code (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1227 +#: src/scm/webid-oidc/errors.scm:1281 #, scheme-format msgid "there is no such refresh token as ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1230 +#: src/scm/webid-oidc/errors.scm:1284 #, scheme-format msgid "" "the refresh token is bound to a key confirmed as ~s, but it is used with key " "~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1233 +#: src/scm/webid-oidc/errors.scm:1287 #, scheme-format msgid "I cannot decode ~s as an ID token (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1236 +#: src/scm/webid-oidc/errors.scm:1290 #, scheme-format msgid "I cannot encode ~s as an ID token (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1239 +#: src/scm/webid-oidc/errors.scm:1293 #, scheme-format msgid "the grant type ~s is not supported" msgstr "" -#: src/scm/webid-oidc/errors.scm:1242 +#: src/scm/webid-oidc/errors.scm:1296 msgid "there is no authorization code in the request" msgstr "" -#: src/scm/webid-oidc/errors.scm:1244 +#: src/scm/webid-oidc/errors.scm:1298 msgid "there is no refresh token in the request" msgstr "" -#: src/scm/webid-oidc/errors.scm:1246 +#: src/scm/webid-oidc/errors.scm:1300 #, scheme-format msgid "~s is not an ID token (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1249 +#: src/scm/webid-oidc/errors.scm:1303 #, scheme-format msgid "~s is not an ID token header (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1252 +#: src/scm/webid-oidc/errors.scm:1306 #, scheme-format msgid "~s is not an ID token payload (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1255 +#: src/scm/webid-oidc/errors.scm:1309 #, scheme-format msgid "" "I couldn’t set the locale to ~s as an approximation of the client locale ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1258 +#: src/scm/webid-oidc/errors.scm:1312 #, scheme-format msgid "~s does not admit ~s as an identity provider" msgstr "" -#: src/scm/webid-oidc/errors.scm:1261 +#: src/scm/webid-oidc/errors.scm:1315 #, scheme-format msgid "" "~a is neither an identity provider (because ~a) nor a webid (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1266 +#: src/scm/webid-oidc/errors.scm:1320 #, scheme-format msgid "the token request failed (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1269 +#: src/scm/webid-oidc/errors.scm:1323 #, scheme-format msgid "you don’t have a refresh token for identity ~a certified by ~a in ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1274 +#: src/scm/webid-oidc/errors.scm:1328 #, scheme-format msgid "all identity provider candidates for ~a failed: ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1278 +#: src/scm/webid-oidc/errors.scm:1332 #, scheme-format msgid "~s failed (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1281 +#: src/scm/webid-oidc/errors.scm:1335 msgid ", " msgstr "" -#: src/scm/webid-oidc/errors.scm:1283 +#: src/scm/webid-oidc/errors.scm:1337 #, scheme-format msgid "no resource has been found to serve URI path ~s" msgstr "" -#: src/scm/webid-oidc/errors.scm:1286 +#: src/scm/webid-oidc/errors.scm:1340 #, scheme-format msgid "no resource has been found to serve URI path ~s, but ~s exists" msgstr "" -#: src/scm/webid-oidc/errors.scm:1289 +#: src/scm/webid-oidc/errors.scm:1343 msgid "the root storage cannot be deleted" msgstr "" -#: src/scm/webid-oidc/errors.scm:1291 +#: src/scm/webid-oidc/errors.scm:1345 #, scheme-format msgid "the container ~s should be emptied before being deleted" msgstr "" -#: src/scm/webid-oidc/errors.scm:1294 +#: src/scm/webid-oidc/errors.scm:1348 #, scheme-format msgid "the group ~s cannot be fetched (because ~a)" msgstr "" -#: src/scm/webid-oidc/errors.scm:1300 +#: src/scm/webid-oidc/errors.scm:1352 +#, scheme-format +msgid "the containment triples in the request to update ~s are not up to date" +msgstr "" + +#: src/scm/webid-oidc/errors.scm:1355 +#, scheme-format +msgid "the server cannot process resources with the ~s content-type" +msgstr "" + +#: src/scm/webid-oidc/errors.scm:1358 +#, scheme-format +msgid "" +"the client wants to create a resource at ~s, which is reserved for an " +"auxiliary resource" +msgstr "" + +#: src/scm/webid-oidc/errors.scm:1361 +#, scheme-format +msgid "" +"the operation on ~s by ~s is refused, because it’s not by ~s and the access " +"control forbids the following mode of operation: ~s" +msgstr "" + +#: src/scm/webid-oidc/errors.scm:1367 msgid "that’s it" msgstr "" -#: src/scm/webid-oidc/errors.scm:1304 +#: src/scm/webid-oidc/errors.scm:1371 #, scheme-format msgid "~a and ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1307 +#: src/scm/webid-oidc/errors.scm:1374 #, scheme-format msgid "~a, ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1311 +#: src/scm/webid-oidc/errors.scm:1378 #, scheme-format msgid "the signature ~a does not match key ~s with payload ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1314 +#: src/scm/webid-oidc/errors.scm:1381 msgid "there is an undefined variable" msgstr "" -#: src/scm/webid-oidc/errors.scm:1316 +#: src/scm/webid-oidc/errors.scm:1383 #, scheme-format msgid "the origin is ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1319 +#: src/scm/webid-oidc/errors.scm:1386 #, scheme-format msgid "a message is attached: ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1322 +#: src/scm/webid-oidc/errors.scm:1389 #, scheme-format msgid "the values ~s are problematic" msgstr "" -#: src/scm/webid-oidc/errors.scm:1325 +#: src/scm/webid-oidc/errors.scm:1392 msgid "there is a kind and args" msgstr "" -#: src/scm/webid-oidc/errors.scm:1327 +#: src/scm/webid-oidc/errors.scm:1394 msgid "there is an assertion failure" msgstr "" -#: src/scm/webid-oidc/errors.scm:1329 +#: src/scm/webid-oidc/errors.scm:1396 #, scheme-format msgid "the program quits with code ~a" msgstr "" -#: src/scm/webid-oidc/errors.scm:1332 +#: src/scm/webid-oidc/errors.scm:1399 msgid "the program cannot recover from this exception" msgstr "" -#: src/scm/webid-oidc/errors.scm:1334 +#: src/scm/webid-oidc/errors.scm:1401 msgid "there is an external error" msgstr "" -#: src/scm/webid-oidc/errors.scm:1336 +#: src/scm/webid-oidc/errors.scm:1403 msgid "there is an error" msgstr "" -#: src/scm/webid-oidc/errors.scm:1338 +#: src/scm/webid-oidc/errors.scm:1405 #, scheme-format msgid "Unhandled exception type ~a." msgstr "" @@ -749,13 +773,13 @@ msgstr "" #: src/scm/webid-oidc/identity-provider.scm:148 #: src/scm/webid-oidc/reverse-proxy.scm:124 -#: src/scm/webid-oidc/hello-world.scm:31 src/scm/webid-oidc/client.scm:618 +#: src/scm/webid-oidc/hello-world.scm:31 src/scm/webid-oidc/client.scm:619 #: src/scm/webid-oidc/example-app.scm:100 msgid "command-line|version" msgstr "" #: src/scm/webid-oidc/identity-provider.scm:150 -#: src/scm/webid-oidc/hello-world.scm:33 src/scm/webid-oidc/client.scm:620 +#: src/scm/webid-oidc/hello-world.scm:33 src/scm/webid-oidc/client.scm:621 #: src/scm/webid-oidc/example-app.scm:102 msgid "comand-line|help" msgstr "" @@ -789,17 +813,17 @@ msgid "comand-line|token-endpoint-uri" msgstr "" #: src/scm/webid-oidc/identity-provider.scm:166 -#: src/scm/webid-oidc/hello-world.scm:35 src/scm/webid-oidc/client.scm:630 +#: src/scm/webid-oidc/hello-world.scm:35 src/scm/webid-oidc/client.scm:631 msgid "comand-line|port" msgstr "" #: src/scm/webid-oidc/identity-provider.scm:168 -#: src/scm/webid-oidc/reverse-proxy.scm:136 src/scm/webid-oidc/client.scm:632 +#: src/scm/webid-oidc/reverse-proxy.scm:136 src/scm/webid-oidc/client.scm:633 msgid "comand-line|log-file" msgstr "" #: src/scm/webid-oidc/identity-provider.scm:170 -#: src/scm/webid-oidc/reverse-proxy.scm:138 src/scm/webid-oidc/client.scm:634 +#: src/scm/webid-oidc/reverse-proxy.scm:138 src/scm/webid-oidc/client.scm:635 msgid "comand-line|error-file" msgstr "" @@ -878,7 +902,7 @@ msgstr "" #: src/scm/webid-oidc/identity-provider.scm:267 #: src/scm/webid-oidc/reverse-proxy.scm:210 -#: src/scm/webid-oidc/hello-world.scm:61 src/scm/webid-oidc/client.scm:699 +#: src/scm/webid-oidc/hello-world.scm:61 src/scm/webid-oidc/client.scm:700 #: src/scm/webid-oidc/example-app.scm:143 #, scheme-format msgid "~a version ~a\n" @@ -914,12 +938,12 @@ msgstr "" #: src/scm/webid-oidc/identity-provider.scm:327 #: src/scm/webid-oidc/reverse-proxy.scm:238 -#: src/scm/webid-oidc/hello-world.scm:72 src/scm/webid-oidc/client.scm:737 +#: src/scm/webid-oidc/hello-world.scm:72 src/scm/webid-oidc/client.scm:738 msgid "The port should be a number between 0 and 65535.\n" msgstr "" #: src/scm/webid-oidc/identity-provider.scm:346 -#: src/scm/webid-oidc/client.scm:748 +#: src/scm/webid-oidc/client.scm:749 #, scheme-format msgid "~a: Internal server error: ~a\n" msgstr "" @@ -1170,23 +1194,23 @@ msgid "" " set the port to bind.\n" msgstr "" -#: src/scm/webid-oidc/client.scm:622 +#: src/scm/webid-oidc/client.scm:623 msgid "comand-line|client-id" msgstr "" -#: src/scm/webid-oidc/client.scm:624 +#: src/scm/webid-oidc/client.scm:625 msgid "comand-line|redirect-uri" msgstr "" -#: src/scm/webid-oidc/client.scm:626 +#: src/scm/webid-oidc/client.scm:627 msgid "comand-line|client-name" msgstr "" -#: src/scm/webid-oidc/client.scm:628 +#: src/scm/webid-oidc/client.scm:629 msgid "comand-line|client-uri" msgstr "" -#: src/scm/webid-oidc/client.scm:649 +#: src/scm/webid-oidc/client.scm:650 #, scheme-format msgid "" "Usage: ~a [OPTIONS]...\n" @@ -1235,15 +1259,15 @@ msgid "" "If you find a bug, send a report to ~a.\n" msgstr "" -#: src/scm/webid-oidc/client.scm:722 +#: src/scm/webid-oidc/client.scm:723 msgid "You need to set the client ID as an URI.\n" msgstr "" -#: src/scm/webid-oidc/client.scm:726 +#: src/scm/webid-oidc/client.scm:727 msgid "You need to set the redirect URI.\n" msgstr "" -#: src/scm/webid-oidc/client.scm:730 +#: src/scm/webid-oidc/client.scm:731 msgid "The client URI should be an URI.\n" msgstr "" diff --git a/src/scm/webid-oidc/errors.scm b/src/scm/webid-oidc/errors.scm index c6802d7..76ce8af 100644 --- a/src/scm/webid-oidc/errors.scm +++ b/src/scm/webid-oidc/errors.scm @@ -934,6 +934,60 @@ cannot-fetch-group-group-uri cannot-fetch-group-cause) +(define-exception-type + &incorrect-containment-triples + &external-error + make-incorrect-containment-triples + incorrect-containment-triples? + (path incorrect-containment-triples-path)) + +(export &incorrect-containment-triples + make-incorrect-containment-triples + incorrect-containment-triples? + incorrect-containment-triples-path) + +(define-exception-type + &unsupported-media-type + &external-error + make-unsupported-media-type + unsupported-media-type? + (content-type unsupported-media-type-content-type)) + +(export &unsupported-media-type + make-unsupported-media-type + unsupported-media-type? + unsupported-media-type-content-type) + +(define-exception-type + &path-is-auxiliary + &external-error + make-path-is-auxiliary + path-is-auxiliary? + (path path-is-auxiliary-path)) + +(export &path-is-auxiliary + make-path-is-auxiliary + path-is-auxiliary? + path-is-auxiliary-path) + +(define-exception-type + &forbidden + &external-error + make-forbidden + forbidden? + (path forbidden-path) + (user forbidden-user) + (owner forbidden-owner) + (mode forbidden-mode)) + +(export &forbidden + make-forbidden + forbidden? + forbidden-path + forbidden-user + forbidden-owner + forbidden-mode) + (define*-public (error->str err #:key (max-depth #f)) (if (record? err) (let* ((type (record-type-descriptor err)) @@ -1294,6 +1348,19 @@ (format #f (G_ "the group ~s cannot be fetched (because ~a)" (uri->string (get 'group-uri)) (recurse (get 'cause))))) + ((&incorrect-containment-triples) + (format #f (G_ "the containment triples in the request to update ~s are not up to date") + (get 'path))) + ((&unsupported-media-type) + (format #f (G_ "the server cannot process resources with the ~s content-type") + (get 'content-type))) + ((&path-is-auxiliary) + (format #f (G_ "the client wants to create a resource at ~s, which is reserved for an auxiliary resource") + (get 'path))) + ((&forbidden) + (format #f (G_ "the operation on ~s by ~s is refused, because it’s not by ~s and the access control forbids the following mode of operation: ~s") + (get 'path) (uri->string (get 'user)) (uri->string (get 'owner)) + (uri->string (get 'mode)))) ((&compound-exception) (let ((components (get 'components))) (if (null? components) diff --git a/src/scm/webid-oidc/server/Makefile.am b/src/scm/webid-oidc/server/Makefile.am index e0ca8d6..12dad08 100644 --- a/src/scm/webid-oidc/server/Makefile.am +++ b/src/scm/webid-oidc/server/Makefile.am @@ -1 +1,7 @@ +dist_serverwebidoidcmod_DATA += \ + %reldir%/create.scm + +serverwebidoidcgo_DATA += \ + %reldir%/create.go + include %reldir%/resource/Makefile.am diff --git a/src/scm/webid-oidc/server/create.scm b/src/scm/webid-oidc/server/create.scm new file mode 100644 index 0000000..93f684c --- /dev/null +++ b/src/scm/webid-oidc/server/create.scm @@ -0,0 +1,183 @@ +(define-module (webid-oidc server create) + #:use-module (webid-oidc errors) + #:use-module (webid-oidc server resource path) + #:use-module (webid-oidc server resource content) + #:use-module (webid-oidc cache) + #:use-module (webid-oidc fetch) + #:use-module (webid-oidc server resource wac) + #:use-module ((webid-oidc stubs) #:prefix stubs:) + #:use-module (webid-oidc rdf-index) + #:use-module ((webid-oidc refresh-token) #:prefix refresh:) + #:use-module (web uri) + #:use-module (web client) + #:use-module (web response) + #:use-module (rdf rdf) + #:use-module (turtle tordf) + #:use-module (turtle fromrdf) + #:use-module (rnrs bytevectors) + #:use-module (ice-9 exceptions) + #:use-module (ice-9 receive) + #:use-module (ice-9 optargs) + #:use-module (ice-9 iconv) + #:use-module (ice-9 textual-ports) + #:use-module (ice-9 binary-ports) + #:use-module (ice-9 threads) + #:use-module (rnrs bytevectors) + #:use-module (oop goops) + #:export + ( + + create + create-root + + )) + +(define (without-containment-triples doc-uri content-type content) + (case content-type + ((text/turtle) + #t) + (else + (raise-exception (make-unsupported-media-type content-type)))) + (let ((graph (fetch + doc-uri + #:http-get + (lambda (uri . args) + (values + (build-response #:headers `((content-type ,content-type))) + content))))) + (with-index + graph + (lambda (rdf-match) + (unless (null? (rdf-match (uri->string doc-uri) + "http://www.w3.org/ns/auth/acl#contains" + #f)) + (raise-exception (make-incorrect-containment-triples + (uri-path doc-uri)))))))) + +(define (types-indicate-container? types) + (and (not (null? types)) + (let ((next (car types))) + (when (uri? next) + (set! next (uri->string next))) + (or (equal? next "http://www.w3.org/ns/ldp#BasicContainer") + (types-indicate-container? (cdr types)))))) + +(define (check-acl-can-append server-name container owner user http-get) + (let ((modes (wac-get-modes server-name container user #:http-get http-get))) + (define (check-modes modes) + (if (null? modes) + (raise-exception + (make-forbidden container user owner + (string->uri "http://www.w3.org/ns/auth/acl#Append"))) + (or + (equal? (car modes) (string->uri "http://www.w3.org/ns/auth/acl#Append")) + (equal? (car modes) (string->uri "http://www.w3.org/ns/auth/acl#Write")) + (check-modes (cdr modes))))) + (check-modes modes))) + +(define* (create server-name owner user container types slug content-type content + #:key + (http-get http-get)) + (unless (equal? owner user) + (check-acl-can-append server-name container owner user http-get)) + (unless (and slug (not (equal? slug ""))) + (set! slug (stubs:random 12))) + (when (string-contains slug "/") + (let ((i (string-contains slug "/"))) + (set! slug (substring slug 0 i)))) + (let ((container? (types-indicate-container? types))) + (let ((doc-uri + (build-uri + (uri-scheme server-name) + #:userinfo (uri-userinfo server-name) + #:host (uri-host server-name) + #:port (uri-port server-name) + #:path + (string-append + "/" + (encode-and-join-uri-path + (append (split-and-decode-uri-path container) + (list slug))) + ;; There’s no risk to have // here, because slug is + ;; non-empty. + (if container? "/" ""))))) + (when (and slug + (or (string-suffix? ".acl" slug) + (string-suffix? ".meta" slug))) + (raise-exception (make-path-is-auxiliary (uri-path doc-uri)))) + (when container? + (without-containment-triples doc-uri content-type content)) + (with-session + (lambda (load-content-type load-contained load-static-content + do-create do-delete) + (catch 'slug-already-exists + (lambda () + (update-path + (uri-path doc-uri) + (lambda (etag auxiliary) + (when etag + (throw 'slug-already-exists)) + (values + (do-create content-type (and container? '()) content) + '())) + load-content-type load-contained load-static-content + do-create do-delete) + doc-uri) + (lambda error + (create server-name owner user container types + (string-append slug "-" (stubs:random 12)) + content-type content + #:http-get http-get)))))))) + +(define (create-root server-name owner) + (define (fix-angle-aux accu chars) + (if (null? chars) + (list->string (reverse accu)) + (let ((next (car chars)) + (rest (cdr chars))) + (let ((next-accu + (if (eqv? next #\>) + (reverse (string->list "%3E")) + (list next)))) + (fix-angle-aux (append next-accu accu) rest))))) + (define (fix-angle str) + (fix-angle-aux '() (string->list str))) + (catch 'already-exists + (lambda () + (with-session + (lambda (load-content-type load-contained load-static-content + do-create do-delete) + (update-path + "/" + (lambda (etag auxiliary) + (when etag + (throw 'already-exists)) + (let ((root-uri + (build-uri + (uri-scheme server-name) + #:userinfo (uri-userinfo server-name) + #:host (uri-host server-name) + #:port (uri-port server-name) + #:path "/"))) + (values + (do-create 'text/turtle '() "") + (list + (cons (string->uri "http://www.w3.org/ns/auth/acl#accessControl") + (do-create 'text/turtle #f + (format #f "@prefix acl: . + +<#default> + a acl:Authorization; + acl:accessTo <~a>; + acl:agent <~a>; + acl:mode acl:Read, acl:Write, acl:Control; + acl:default <~a/>. +" + (fix-angle (uri->string root-uri)) + (fix-angle (uri->string owner)) + (fix-angle (uri->string root-uri))))))))) + load-content-type load-contained load-static-content + do-create do-delete))) + #t) + (lambda error + #f))) diff --git a/tests/Makefile.am b/tests/Makefile.am index fd2c47c..2a4c5b7 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -44,7 +44,8 @@ TESTS = %reldir%/load-library.scm \ %reldir%/server-content.scm \ %reldir%/server-path.scm \ %reldir%/http-link.scm \ - %reldir%/acl.scm + %reldir%/acl.scm \ + %reldir%/crud.scm EXTRA_DIST += $(TESTS) %reldir%/ChangeLog diff --git a/tests/crud.scm b/tests/crud.scm new file mode 100644 index 0000000..422b1da --- /dev/null +++ b/tests/crud.scm @@ -0,0 +1,80 @@ +(use-modules (webid-oidc server create) + (webid-oidc server resource content) + (webid-oidc server resource path) + (webid-oidc errors) + (webid-oidc testing) + (web http) + (web request) + (web response) + (web uri)) + +(with-test-environment + "crud" + (lambda () + (for-each + (lambda (f) + (false-if-exception + (delete-file + (string-append + "tests/crud.home/webid-oidc/server/content/" + f)))) + '("6/8OMG_V5x-KmI6TI" + "X/hqM_2Avn5_egTzs" + "5/n1KPgAd3ng4wSqn" + "D/wxU0ogx5rzRrvu2" + "F/BQKBGrtq6U_M0L7" + "n/U46BXbknEaLWZpH" + "A/fkGTJRCHc-jHk-V" + "a/68pTwiImTWTpjQl" + "H/y4S5p1BqTEJi-Jb")) + (for-each + (lambda (f) + (false-if-exception + (delete-file + (string-append + "tests/crud.home/webid-oidc/server/path/" + f)))) + '("L/uhr1159jdGYjIj_tpM6FDiW4rUZDQQKUnT35lhAR-s" + "8/jgewChguz6YRPCTBOkx_9CW94iH_X88rP6Os4aM8jg" + "n/PQ_3L8lXCsqpz1tkUhsJnVC9rcyqgDD41DnFPIDG1Q" + "i/l7asoJjJEMhngUeSt4tHVu8Zxx4EFG_FDeJfL3-oPE")) + (let ((server-name (string->uri "https://example.com")) + (owner (string->uri "https://alice.databox.me"))) + (unless + (create-root server-name owner) + (exit 1)) + (let ((inbox (create server-name owner owner "/" + (list (string->uri "http://www.w3.org/ns/ldp#BasicContainer")) + "inbox" + 'text/turtle + ""))) + (unless (equal? inbox (string->uri "https://example.com/inbox/")) + (exit 2)) + (let ((inbox-2 (create server-name owner owner "/" + (list (string->uri "http://www.w3.org/ns/ldp#BasicContainer")) + "inbox" + 'text/turtle + ""))) + (when (equal? inbox-2 (string->uri "https://example.com/inbox/")) + (exit 3))) + (let ((notif-1 (create server-name owner owner "/inbox" + '() + #f + 'text/turtle + ""))) + (unless (equal? notif-1 + (string->uri "https://example.com/inbox/NgnO8RAS9FpPiO5j")) + (format (current-error-port) "Notif 1: ~s\n" notif-1) + (exit 4)))) + (for-each + (lambda (slug) + (with-exception-handler + (lambda (error) + (unless (path-is-auxiliary? error) + (raise-exception error))) + (lambda () + (create server-name owner owner "/" '() slug 'text/turtle "") + (exit 5)) + #:unwind? #t + #:unwind-for-type &path-is-auxiliary)) + '(".acl" ".meta"))))) -- cgit v1.2.3