blob: dfd292938b075ace4ad973484c3ba1e6c02e7bfb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
(declaim (optimize (speed 0) (safety 3) (debug 3)))
(in-package :resume)
(defclass login-service (rest-service)
((form :initarg :form
:initform nil
:accessor form)
(title :initarg :title
:initform nil
:accessor title))
(:documentation ""))
(defclass login-authenticate-service (rest-service)
((location-p :initform nil))
(:documentation ""))
(defun login-json ()
(with-noauth (instance login-service)
(setf (title instance) "Login")
(setf (form instance) (make-form "login-form"
nil
t
'((:name "username" :label "Username" :field-type "text" :required "required")
(:name "pwd" :label "Password" :field-type "password" :required "required")
(:label "Login" :field-type "button" :onclick "on_login_submit_clicked()"))))))
(defun login-forgot-json ()
(with-noauth (instance login-service)
(setf (title instance) "Reset Password")
(setf (form instance) (make-form "login-forgot-form"
nil
t
'((:name "username" :label "Username" :field-type "text" :required "required")
(:label "Send password reset email" :field-type "button" :onclick "on-login-forgot-submit-clicked"))))))
(defun login-authenticate-json (username pwd)
(with-noauth (instance login-authenticate-service)
(if (or (org-ckons-core::null-or-empty-p username)
(org-ckons-core::null-or-empty-p pwd))
(setf (errormsg instance) "Login failed.")
(with-resume-database
(let* ((auth-pkg (make-instance 'auth-pkg))
(user (get-active-user-by-username-pwd auth-pkg username pwd)))
(cond (user
(set-user user)
(setf (message instance) "Successfully logged in.")
(setf (errormsg instance) nil))
(t
(setf (message instance) nil)
(setf (errormsg instance) "Login failed."))))))
(setf (message instance) (message instance))
(setf (errormsg instance) (errormsg instance))))
(define-endpoint ("/login" :method :get) () login-json)
(define-endpoint ("/login/authenticate" :method :post) (&post (username :parameter-type 'string) (pwd :parameter-type 'string)) login-authenticate-json username pwd)
(define-endpoint ("/login/forgot" :method :get) () login-forgot-json)
(define-endpoint ("/logout" :method :get) () logout-json)
|