AtlatestRepositorysigil-discourse
1;;; (discourse users) - User management.
2;;;
3;;; Functions for listing, creating, and administering Discourse users.
4
5(define-library (discourse users)
6 (import (sigil core)
7 (sigil string)
8 (discourse client))
9
10 (export discourse-get-user
11 discourse-list-users
12 discourse-create-user
13 discourse-suspend-user
14 discourse-unsuspend-user
15 discourse-activate-user
16 discourse-deactivate-user
17 discourse-log-out-user)
19 (begin
21 ;;; Get a user's profile by username.
22 (define (discourse-get-user base-url api-key username target)
23 (discourse-get/json api-key username
24 (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 username
31 (discourse-url/query base-url
32 (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 username
38 (discourse-url base-url "users.json")
39 #{ name: name
40 email: email
41 password: password
42 username: target-username
43 active: #t
44 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 username
51 (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 username
58 (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 username
64 (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 username
70 (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 username
76 (discourse-url base-url "admin" "users" (number->string user-id) "log_out.json")
77 #{}))
79 ))