git.mcksp
    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
(in-package #:gitbrn)

(defmethod make-load-form ((template routes:uri-component-template) &optional env)
  (declare (ignore env))
  `(make-instance ',(class-name (class-of template))
    :spec ',(routes:template-data template)))

(defparameter *server* (make-instance 'easy-routes:easy-routes-acceptor
                                      :port 3001
                                      :address "0.0.0.0"))

(defstruct user id username)

(defvar *current-user* nil)

(defmethod hunchentoot:handle-request ((hunchentoot:acceptor (eql *server*)) request)
  (let* ((*current-user* (get-current-user request)))
    (progn
      (call-next-method))))

(defun get-current-user (request)
  (let ((session (hunchentoot:cookie-in "session" request)))
    (let ((username (sqlite:execute-single *db* "select u.username, u.id from users u join sessions s on u.id = s.user_id where s.token = ?" session)))
      (if (null username)
        nil
        (make-user :username username :id "123")))))

(push
  (hunchentoot:create-folder-dispatcher-and-handler
    "/static/assets/" "/home/mcksp/proj/gitbrn/assets/")
  hunchentoot:*dispatch-table*)

(defun start ()
  (hunchentoot:start *server*))

(defun stop ()
  (hunchentoot:stop *server*))


(defun main ()
  (start)
  (sleep #xffffffff))