AtlatestRepositorysigil-discourse
sigil-discourse / tree / src / discourseusers.sgl
1
;;; (discourse users) - User management.2
;;;3
;;; Functions for listing, creating, and administering Discourse users.5
(define-library (discourse users)6
(import (sigil core)7
(sigil string)8
(discourse client))10
(export discourse-get-user11
discourse-list-users12
discourse-create-user13
discourse-suspend-user14
discourse-unsuspend-user15
discourse-activate-user16
discourse-deactivate-user17
discourse-log-out-user)19
(begin21
;;; Get a user's profile by username.22
(define (discourse-get-user base-url api-key username target)23
(discourse-get/json api-key username24
(discourse-url base-url "users" (string-append target ".json"))))26
;;; List active users (admin endpoint).27
;;;28
;;; Optional email: keyword filters by exact email address.29
(define (discourse-list-users base-url api-key username (keys: (email #f)))30
(discourse-get/json api-key username31
(discourse-url/query base-url32
(list (cons 'email email))33
"admin" "users" "list" "active.json")))35
;;; Create a new user.36
(define (discourse-create-user base-url api-key username name email password target-username)37
(discourse-post/json api-key username38
(discourse-url base-url "users.json")39
#{ name: name40
email: email41
password: password42
username: target-username43
active: #t44
approved: #t }))46
;;; Suspend a user.47
;;;48
;;; duration is in days, reason is a string explanation.49
(define (discourse-suspend-user base-url api-key username user-id duration reason)50
(discourse-put/json api-key username51
(discourse-url base-url "admin" "users" (number->string user-id) "suspend.json")52
#{ suspend_until: (string-append (number->string duration) " days")53
reason: reason }))55
;;; Unsuspend a user.56
(define (discourse-unsuspend-user base-url api-key username user-id)57
(discourse-put/json api-key username58
(discourse-url base-url "admin" "users" (number->string user-id) "unsuspend.json")59
#{}))61
;;; Activate a user account.62
(define (discourse-activate-user base-url api-key username user-id)63
(discourse-put/json api-key username64
(discourse-url base-url "admin" "users" (number->string user-id) "activate.json")65
#{}))67
;;; Deactivate a user account.68
(define (discourse-deactivate-user base-url api-key username user-id)69
(discourse-put/json api-key username70
(discourse-url base-url "admin" "users" (number->string user-id) "deactivate.json")71
#{}))73
;;; Force log out a user.74
(define (discourse-log-out-user base-url api-key username user-id)75
(discourse-post/json api-key username76
(discourse-url base-url "admin" "users" (number->string user-id) "log_out.json")77
#{}))79
))