summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVivien Kraus <vivien@planete-kraus.eu>2021-06-27 15:56:20 +0200
committerVivien Kraus <vivien@planete-kraus.eu>2021-07-02 14:49:13 +0200
commit6cbe572b7e5d2e1357a10f0dff94b561129f34c6 (patch)
treea44826cd9bfe4b993348c1f97040c4bc112bcbbd /src
parentabd89b0c18beb6f6d3224cf661c446cbc61fb443 (diff)
Add a function to delete a resource as with DELETE
Diffstat (limited to 'src')
-rw-r--r--src/scm/webid-oidc/server/Makefile.am6
-rw-r--r--src/scm/webid-oidc/server/delete.scm66
2 files changed, 70 insertions, 2 deletions
diff --git a/src/scm/webid-oidc/server/Makefile.am b/src/scm/webid-oidc/server/Makefile.am
index 371fc3d..6ef3dcf 100644
--- a/src/scm/webid-oidc/server/Makefile.am
+++ b/src/scm/webid-oidc/server/Makefile.am
@@ -2,12 +2,14 @@ dist_serverwebidoidcmod_DATA += \
%reldir%/create.scm \
%reldir%/read.scm \
%reldir%/precondition.scm \
- %reldir%/update.scm
+ %reldir%/update.scm \
+ %reldir%/delete.scm
serverwebidoidcgo_DATA += \
%reldir%/create.go \
%reldir%/read.go \
%reldir%/precondition.go \
- %reldir%/update.go
+ %reldir%/update.go \
+ %reldir%/delete.go
include %reldir%/resource/Makefile.am
diff --git a/src/scm/webid-oidc/server/delete.scm b/src/scm/webid-oidc/server/delete.scm
new file mode 100644
index 0000000..edd23cb
--- /dev/null
+++ b/src/scm/webid-oidc/server/delete.scm
@@ -0,0 +1,66 @@
+(define-module (webid-oidc server delete)
+ #:use-module (webid-oidc errors)
+ #:use-module (webid-oidc server resource path)
+ #:use-module (webid-oidc server resource content)
+ #:use-module (webid-oidc server precondition)
+ #:use-module (webid-oidc cache)
+ #:use-module (webid-oidc fetch)
+ #:use-module (webid-oidc http-link)
+ #: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 (ice-9 hash-table)
+ #:use-module (rnrs bytevectors)
+ #:use-module (oop goops)
+ #:export
+ (
+
+ delete
+
+ ))
+
+(define* (delete server-name owner user path if-match if-none-match
+ #:key
+ (http-get http-get))
+ (check-acl-can-write server-name path owner user)
+ (with-session
+ (lambda (load-content-type load-contained load-static-content
+ do-create do-delete)
+ (receive (base-path path-type)
+ (base-path path)
+ (update-path
+ base-path
+ (lambda (main-etag auxiliary)
+ (let ((relevant-etag
+ (if path-type
+ (assoc-ref auxiliary path-type)
+ main-etag)))
+ (check-precondition path if-match if-none-match relevant-etag)
+ (if path-type
+ ;; Delete an auxiliary resource
+ (values
+ main-etag
+ (filter
+ (lambda (auxiliary)
+ (not (equal? (car auxiliary) path-type)))
+ auxiliary))
+ ;; Delete the main resource, if it’s not the root and
+ ;; it’s not a non-empty container (those things are
+ ;; checked by update-path).
+ #f)))
+ load-content-type load-contained load-static-content do-create do-delete)))))