Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defmethod authenticate ((verify verify) &key &allow-other-keys)
- (let ((token (hunchentoot:cookie-in "token" (request *radiance-request*))))
- (if token
- (progn
- (setf token (decrypt token (config-tree :verify :session :secret)))
- (if (and token (find #\- token))
- (let* ((username (subseq token 0 (position #\- token)))
- (session (session-start (implementation 'session) username))
- (user (session-user session))
- (token (subseq token (1+ (position #\- token)))))
- (if (user-saved-p user)
- (authenticate-user user session token)
- (error "Unknown user: ~a" username)))
- (error "Malformed token: ~a" token)))
- (error "No token received."))))
- (defun authenticate-user (user session token)
- (setf token (if (config-tree :verify :session :use-per-user-secret)
- (decrypt token (user-field user "secret"))
- token))
- (let ((data (split-sequence:split-sequence #\: token)))
- (if (= (length data) 3)
- (destructuring-bind (timestamp random session-id) data
- (declare (ignore random))
- (if (string= session-id (uuid session))
- (progn (log:info "User ~a successfully authenticated session ~a (initiated on ~a)" user session-id timestamp)
- session)
- (error "Invalid session ID: ~a" session-id)))
- (error "Invalid data length: ~a" (length data)))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement