mirror of
https://github.com/hkalexling/Mango.git
synced 2025-08-04 03:45:32 -04:00
27 lines
579 B
Crystal
27 lines
579 B
Crystal
require "kemal"
|
|
require "./storage"
|
|
require "./util"
|
|
|
|
class AuthHandler < Kemal::Handler
|
|
def initialize(@storage : Storage)
|
|
end
|
|
|
|
def call(env)
|
|
return call_next(env) \
|
|
if request_path_startswith env, ["/login", "/logout"]
|
|
|
|
cookie = env.request.cookies.find { |c| c.name == "token" }
|
|
if cookie.nil? || ! @storage.verify_token cookie.value
|
|
return env.redirect "/login"
|
|
end
|
|
|
|
if request_path_startswith env, ["/admin", "/api/admin", "/download"]
|
|
unless @storage.verify_admin cookie.value
|
|
env.response.status_code = 403
|
|
end
|
|
end
|
|
|
|
call_next env
|
|
end
|
|
end
|