commit
13b28f0064
45
src/authd.cr
45
src/authd.cr
|
@ -10,6 +10,8 @@ module AuthD
|
|||
enum RequestTypes
|
||||
GetToken
|
||||
AddUser
|
||||
GetUser
|
||||
GetUserByCredentials
|
||||
end
|
||||
|
||||
enum ResponseTypes
|
||||
|
@ -17,6 +19,7 @@ module AuthD
|
|||
MalformedRequest
|
||||
InvalidCredentials
|
||||
InvalidUser
|
||||
UserNotFound # For UID-based GetUser requests.
|
||||
end
|
||||
|
||||
class GetTokenRequest
|
||||
|
@ -38,6 +41,19 @@ module AuthD
|
|||
})
|
||||
end
|
||||
|
||||
class GetUserRequest
|
||||
JSON.mapping({
|
||||
uid: Int32
|
||||
})
|
||||
end
|
||||
|
||||
class GetUserByCredentialsRequest
|
||||
JSON.mapping({
|
||||
login: String,
|
||||
password: String
|
||||
})
|
||||
end
|
||||
|
||||
class Client < IPC::Client
|
||||
property key : String
|
||||
|
||||
|
@ -48,7 +64,7 @@ module AuthD
|
|||
end
|
||||
|
||||
def get_token?(login : String, password : String)
|
||||
send RequestTypes::GetToken.value.to_u8, {
|
||||
send RequestTypes::GetToken, {
|
||||
:login => login,
|
||||
:password => password
|
||||
}.to_json
|
||||
|
@ -62,6 +78,33 @@ module AuthD
|
|||
end
|
||||
end
|
||||
|
||||
def get_user?(login : String, password : String)
|
||||
send RequestTypes::GetUserByCredentials, {
|
||||
:login => login,
|
||||
:password => password
|
||||
}.to_json
|
||||
|
||||
response = read
|
||||
|
||||
if response.type == ResponseTypes::Ok.value.to_u8
|
||||
User.from_json response.payload
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
def get_user?(uid : Int32)
|
||||
send RequestTypes::GetUser, {:uid => uid}.to_json
|
||||
|
||||
response = read
|
||||
|
||||
if response.type == ResponseTypes::Ok.value.to_u8
|
||||
User.from_json response.payload
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
def send(type : RequestTypes, payload)
|
||||
send type.value.to_u8, payload
|
||||
end
|
||||
|
|
34
src/main.cr
34
src/main.cr
|
@ -1,11 +1,9 @@
|
|||
require "uuid"
|
||||
require "option_parser"
|
||||
require "openssl"
|
||||
|
||||
require "jwt"
|
||||
|
||||
require "pg"
|
||||
require "crecto"
|
||||
|
||||
require "ipc"
|
||||
|
||||
require "./authd.cr"
|
||||
|
@ -93,6 +91,36 @@ IPC::Service.new "auth" do |event|
|
|||
user = passwd.add_user request.login, request.password
|
||||
|
||||
client.send ResponseTypes::Ok, user.to_json
|
||||
when RequestTypes::GetUserByCredentials
|
||||
begin
|
||||
request = GetUserByCredentialsRequest.from_json payload
|
||||
rescue e
|
||||
client.send ResponseTypes::MalformedRequest, e.message || ""
|
||||
next
|
||||
end
|
||||
|
||||
user = passwd.get_user request.login, request.password
|
||||
|
||||
if user
|
||||
client.send ResponseTypes::Ok, user.to_json
|
||||
else
|
||||
client.send ResponseTypes::UserNotFound, ""
|
||||
end
|
||||
when RequestTypes::GetUser
|
||||
begin
|
||||
request = GetUserRequest.from_json payload
|
||||
rescue e
|
||||
client.send ResponseTypes::MalformedRequest, e.message || ""
|
||||
next
|
||||
end
|
||||
|
||||
user = passwd.get_user request.uid
|
||||
|
||||
if user
|
||||
client.send ResponseTypes::Ok, user.to_json
|
||||
else
|
||||
client.send ResponseTypes::UserNotFound, ""
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -59,7 +59,6 @@ class Passwd
|
|||
def get_user(uid : Int32) : AuthD::User?
|
||||
each_user do |user|
|
||||
if user.uid == uid
|
||||
# FIXME: Check user groups and register them here.
|
||||
set_user_groups user
|
||||
|
||||
return user
|
||||
|
@ -76,8 +75,9 @@ class Passwd
|
|||
|
||||
each_user do |user|
|
||||
if user.login == login
|
||||
# FIXME: XXX: HASH!!!!!
|
||||
if user.password_hash == hash
|
||||
set_user_groups user
|
||||
|
||||
return user
|
||||
end
|
||||
|
||||
|
@ -201,6 +201,7 @@ class AuthD::User
|
|||
@office_phone_number = gecos[2]?
|
||||
@home_phone_number = gecos[3]?
|
||||
@other_contact = gecos[4]?
|
||||
@avatar = gecos[5]? # CAUTION: NON-STANDARD EXTENSION
|
||||
end
|
||||
|
||||
# FIXME: What about those two fields? Keep them, remove them?
|
||||
|
|
|
@ -8,11 +8,11 @@ class AuthD::User
|
|||
getter shell : String = "/bin/nologin"
|
||||
getter groups = Array(String).new
|
||||
getter full_name : String? = nil
|
||||
getter avatar : String? = nil
|
||||
getter location : String? = nil
|
||||
getter office_phone_number : String? = nil
|
||||
getter home_phone_number : String? = nil
|
||||
getter other_contact : String? = nil
|
||||
getter avatar : String? = nil
|
||||
|
||||
JSON.mapping({
|
||||
login: String,
|
||||
|
@ -23,7 +23,6 @@ class AuthD::User
|
|||
shell: String,
|
||||
groups: Array(String),
|
||||
full_name: String?,
|
||||
avatar: String?,
|
||||
office_phone_number: String?,
|
||||
home_phone_number: String?,
|
||||
other_contact: String?
|
||||
|
@ -42,10 +41,10 @@ class AuthD::User
|
|||
:shell => @shell,
|
||||
:groups => @groups,
|
||||
:full_name => @full_name,
|
||||
:avatar => @avatar,
|
||||
:office_phone_number => @office_phone_number,
|
||||
:home_phone_number => @home_phone_number,
|
||||
:other_contact => @other_contact
|
||||
:other_contact => @other_contact,
|
||||
:avatar => @avatar
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue