summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivien Kraus <vivien@planete-kraus.eu>2021-06-18 15:39:58 +0200
committerVivien Kraus <vivien@planete-kraus.eu>2021-06-18 17:02:51 +0200
commit4a607b05f1cf29d528893e0f73be2153badb6f4e (patch)
tree2376e585c10a9f5769574a67477c379ef2e07414
parentb24dd9740c80d7ee2fb125171a9d9a1e9f1218a8 (diff)
Implement the POST method for the server0.4.13
-rw-r--r--doc/webid-oidc.texi21
-rw-r--r--po/fr.po322
-rw-r--r--po/webid-oidc.pot314
-rw-r--r--src/scm/webid-oidc/errors.scm67
-rw-r--r--src/scm/webid-oidc/server/Makefile.am6
-rw-r--r--src/scm/webid-oidc/server/create.scm183
-rw-r--r--tests/Makefile.am3
-rw-r--r--tests/crud.scm80
8 files changed, 704 insertions, 292 deletions
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 <vivien@planete-kraus.eu>\n"
"Language-Team: French <vivien@planete-kraus.eu>\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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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: <http://www.w3.org/ns/auth/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")))))