Authd::Request::SearchUser

ipc07
Philippe PITTOLI 2020-03-23 15:06:54 +01:00
parent 817425de8d
commit 18e06134fd
4 changed files with 85 additions and 0 deletions

View File

@ -23,6 +23,8 @@ targets:
main: utils/authd-user-mod.cr
auth-user-validate:
main: utils/authd-user-validate.cr
auth-user-search:
main: utils/authd-user-search.cr
crystal: 0.31

View File

@ -120,6 +120,12 @@ class AuthD::Response
initialize :user
end
class MatchingUsers < Response
property users : Array(::AuthD::User::Public)
initialize :users
end
# This creates a Request::Type enumeration. One entry for each request type.
{% begin %}
enum Type
@ -311,6 +317,12 @@ class AuthD::Request
initialize :user
end
class SearchUser < Request
property user : String
initialize :user
end
# This creates a Request::Type enumeration. One entry for each request type.
{% begin %}
enum Type
@ -556,6 +568,20 @@ module AuthD
raise Exception.new "unexpected response"
end
end
def search_user(user_login : String)
send Request::SearchUser.new user_login
response = Response.from_ipc read
case response
when Response::MatchingUsers
response.users
when Response::Error
raise Exception.new response.reason
else
Exception.new
end
end
end
end

View File

@ -385,6 +385,23 @@ class AuthD::Service
@users_per_uid.update user.uid.to_s, user
Response::PasswordRecoverySent.new user.to_public
when Request::SearchUser
pattern = Regex.new request.user
matching_users = Array(AuthD::User::Public).new
users = @users.to_a
users.each do |u|
# pp! u
if pattern =~ u.login
puts "#{u.login} matches #{pattern}"
matching_users << u.to_public
else
puts "#{u.login} doesn't match #{pattern}"
end
end
Response::MatchingUsers.new matching_users
else
Response::Error.new "unhandled request type"
end

View File

@ -0,0 +1,40 @@
require "option_parser"
require "../src/authd.cr"
# key_file : String? = nil
login : String? = nil
activation_key : String? = nil
OptionParser.parse do |parser|
parser.unknown_args do |args|
if args.size != 1
puts "usage: #{PROGRAM_NAME} login-to-search [options]"
exit 1
end
login = args[0]
end
#parser.on "-K file", "--key-file file", "Read the authd shared key from a file." do |file|
# key_file = file
#end
parser.on "-h", "--help", "Prints this help message." do
puts "usage: #{PROGRAM_NAME} login-to-search [options]"
puts parser
exit 0
end
end
begin
authd = IPC::Connection.new "auth"
authd = AuthD::Client.new
# authd.key = File.read(key_file.not_nil!).chomp
pp! r = authd.search_user login.not_nil!
rescue e
puts "Error: #{e}"
exit 1
end