diff --git a/src/adduser.cr b/src/adduser.cr index 9384dbc..17dc19d 100644 --- a/src/adduser.cr +++ b/src/adduser.cr @@ -72,7 +72,7 @@ if user_password.nil? exit 1 end -user = User.new +user = AuthD::User.new user.username = user_name user.password = user_password user.perms = user_perms diff --git a/src/authd.cr b/src/authd.cr index 59de698..889a5f4 100644 --- a/src/authd.cr +++ b/src/authd.cr @@ -2,8 +2,10 @@ require "kemal" require "jwt" +require "./user.cr" + class HTTP::Server::Context - property authd_user : Hash(String, JSON::Any)? + property authd_user : AuthD::User? end class AuthD::Middleware < Kemal::Handler @@ -26,7 +28,20 @@ class AuthD::Middleware < Kemal::Handler payload, header = JWT.decode x_token, @key, "HS256" if payload - context.authd_user = payload + context.authd_user = AuthD::User.new.tap do |u| + u.username = payload["username"].as_s? + u.realname = payload["realname"].as_s? + u.avatar = payload["avatar"].as_s? + u.perms = Array(String).new + + payload["perms"].as_a.tap do |perms| + perms.each do |perm| + if perm.class == String + u.perms! << perm.as_s + end + end + end + end end end diff --git a/src/main.cr b/src/main.cr index 4c1fea0..0477ab3 100644 --- a/src/main.cr +++ b/src/main.cr @@ -50,7 +50,7 @@ post "/token" do |env| next halt env, status_code: 400, response: ({error: "Missing password."}.to_json) end - user = MyRepo.get_by(User, username: username, password: password) + user = MyRepo.get_by AuthD::User, username: username, password: password if ! user next halt env, status_code: 400, response: ({error: "Invalid user or password."}.to_json) diff --git a/src/user.cr b/src/user.cr index 08af4cd..df50ac2 100644 --- a/src/user.cr +++ b/src/user.cr @@ -2,7 +2,7 @@ require "pg" require "crecto" -class User < Crecto::Model +class AuthD::User < Crecto::Model schema "users" do # table name field :username, String field :realname, String