LifePex/src/systems/auth.rb

48 lines
1.0 KiB
Ruby

class LifePex::Systems::AuthSystem < Sinatra::Base
helpers Sinatra::Cookies
include JSON::API
def user_id_decoded(cookies = nil)
cookies = cookies() if cookies.nil?
begin
decoded = JWT.decode(cookies["auth"], LifePex::SECRET)
decoded[0]["user_id"]
rescue => err
STDERR.puts "user_id_decoded: #{err}"
nil
end
end
alias current_user_id user_id_decoded
def logged_in?
if cookies["auth"]
user_id_decoded cookies
else
nil
end
end
def current_user
if @current_user
@current_user
elsif logged_in?
@current_user = LifePex::User.where(id: user_id_decoded(cookies)).first
else
raise RuntimeError.new "Not connected"
end
end
set(:auth) do
condition do
unless logged_in?
if accept_json?
halt 401, { message: 'You need to POST /api/user/v1/register to register an account and POST /api/user/v1/login to get a cookie first' }.to_json
else
redirect "/login", 303
end
end
end
end
end