Crystal bindings: authc kinda works.

master
Philippe Pittoli 2023-02-03 02:09:03 +01:00
parent 7a1e66423f
commit f79938f441
4 changed files with 39 additions and 5 deletions

View File

@ -1,12 +1,25 @@
require "../src/json"
require "json"
module AuthD
class Client < IPC
property key : String
property server_fd : Int32 = -1
def initialize
super
@key = ""
fd = self.connect "auth"
if fd.nil?
raise "couldn't connect to 'auth' IPC service"
end
@server_fd = fd
end
def read
slice = self.read @server_fd
m = IPCMessage::TypedMessage.deserialize slice
m.not_nil!
end
def get_token?(login : String, password : String) : String?
@ -45,8 +58,14 @@ module AuthD
end
end
def send_now(msg : IPC::JSON)
m = IPCMessage::TypedMessage.new msg.type.to_u8, msg.to_json
write @server_fd, m
end
def send_now(type : Request::Type, payload)
send_now @server_fd, type.value.to_u8, payload
m = IPCMessage::TypedMessage.new type.value.to_u8, payload
write @server_fd, m
end
def decode_token(token)
@ -61,7 +80,7 @@ module AuthD
def add_user(login : String, password : String,
email : String?,
phone : String?,
profile : Hash(String, JSON::Any)?) : ::AuthD::User::Public | Exception
profile : Hash(String, ::JSON::Any)?) : ::AuthD::User::Public | Exception
send_now Request::AddUser.new @key, login, password, email, phone, profile
@ -126,7 +145,7 @@ module AuthD
password : String,
email : String?,
phone : String?,
profile : Hash(String, JSON::Any)?) : ::AuthD::User::Public?
profile : Hash(String, ::JSON::Any)?) : ::AuthD::User::Public?
send_now Request::Register.new login, password, email, phone, profile
response = AuthD.responses.parse_ipc_json read

View File

@ -27,6 +27,12 @@ build-authd:
run-authd:
LD_LIBRARY_PATH=$(LDPATH) ./bin/authd
build-authc:
CRYSTAL_LIBRARY_PATH=$(LDPATH) shards build authc
run-authc:
LD_LIBRARY_PATH=$(LDPATH) ./bin/authc
run-test:
crystal run src/libauth.cr

View File

@ -11,6 +11,8 @@ targets:
main: src/pongd.cr
authd:
main: authd/main.cr
authc:
main: authd/authc.cr
crystal: 1.7.1

View File

@ -40,7 +40,7 @@ class IPC
fd
end
def connect(name : String) : Int
def connect(name : String) : Int32
fd = uninitialized Int32
if LibIPC.connect_service(@context, pointerof(fd), name, name.size) != 0
raise "oh noes, 'connect_service' iz brkn"
@ -66,6 +66,13 @@ class IPC
self.write(fd, buffer.to_unsafe, buffer.size.to_u64)
end
def read(fd : Int32) : Slice(UInt8)
buffer : Bytes = Bytes.new 2000000
size = buffer.size.to_u64
LibIPC.read(@context, fd, buffer.to_unsafe, pointerof(size))
buffer[0..size]
end
def schedule(fd : Int32, string : String)
self.schedule(fd, string.to_unsafe, string.size.to_u64)
end
@ -96,7 +103,7 @@ class IPC
end
end
def close_all()
def close
if LibIPC.close_all(@context) != 0
raise "Oh noes, 'close all' iz brkn"
end