Initial import of LogDarioSeq baseline
Establishes version control for the personal Logseq DB fork before starting the server-client architecture migration and domain features described in docs/agent-guide and the approved implementation plan. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
94
cli/lib/auth_command.ml
Normal file
94
cli/lib/auth_command.ml
Normal file
@@ -0,0 +1,94 @@
|
||||
open Cli_effect.Infix
|
||||
|
||||
type parsed = Parsed_login | Parsed_logout
|
||||
type action = Login | Logout
|
||||
|
||||
let command_id = function
|
||||
| Parsed_login -> Command_id.Login
|
||||
| Parsed_logout -> Logout
|
||||
|
||||
let validate_parsed _ = Ok ()
|
||||
|
||||
let build ?registry:_ _ _ = function
|
||||
| Parsed_login -> Ok Login
|
||||
| Parsed_logout -> Ok Logout
|
||||
|
||||
let login_value (result : Auth_state.login_result) =
|
||||
let fields =
|
||||
Vec.of_array
|
||||
[|
|
||||
(Edn_util.keyword "auth-path", Edn_util.string result.auth_path);
|
||||
(Edn_util.keyword "authorize-url", Edn_util.string result.authorize_url);
|
||||
(Edn_util.keyword "opened", Edn_util.bool result.opened);
|
||||
( Edn_util.keyword "updated-at",
|
||||
Edn_util.int64 (Time.time_to_epoch_ms result.updated_at) );
|
||||
|]
|
||||
in
|
||||
let fields =
|
||||
match result.email with
|
||||
| Some email ->
|
||||
Vec.push_back fields (Edn_util.keyword "email", Edn_util.string email)
|
||||
| None -> fields
|
||||
in
|
||||
let fields =
|
||||
match result.sub with
|
||||
| Some sub ->
|
||||
Vec.push_back fields (Edn_util.keyword "sub", Edn_util.string sub)
|
||||
| None -> fields
|
||||
in
|
||||
Edn_util.map_vec fields
|
||||
|
||||
let logout_value (result : Auth_state.logout_result) =
|
||||
Edn_util.map_vec
|
||||
(Vec.of_array
|
||||
[|
|
||||
(Edn_util.keyword "auth-path", Edn_util.string result.auth_path);
|
||||
(Edn_util.keyword "deleted", Edn_util.bool result.deleted);
|
||||
(Edn_util.keyword "logout-url", Edn_util.string result.logout_url);
|
||||
(Edn_util.keyword "opened", Edn_util.bool result.opened);
|
||||
( Edn_util.keyword "logout-completed",
|
||||
Edn_util.bool result.logout_completed );
|
||||
|])
|
||||
|
||||
let execute_with_mode action config mode =
|
||||
match action with
|
||||
| Login -> (
|
||||
Auth_state.login config >>= function
|
||||
| Ok result ->
|
||||
Cli_effect.pure
|
||||
(Cli_result.ok ~command:Command_id.Login mode
|
||||
(Raw (login_value result)))
|
||||
| Error err ->
|
||||
Cli_effect.pure (Output_mode.error ~command:Command_id.Login mode err)
|
||||
)
|
||||
| Logout -> (
|
||||
Auth_state.logout config >>= function
|
||||
| Ok result ->
|
||||
Cli_effect.pure
|
||||
(Cli_result.ok ~command:Command_id.Logout mode
|
||||
(Raw (logout_value result)))
|
||||
| Error err ->
|
||||
Cli_effect.pure
|
||||
(Output_mode.error ~command:Command_id.Logout mode err))
|
||||
|
||||
let meta id doc =
|
||||
{
|
||||
Command_registry.id;
|
||||
path = Command_id.to_path id;
|
||||
doc;
|
||||
long_doc = None;
|
||||
examples = Vec.empty;
|
||||
options = Vec.empty;
|
||||
category = Command_registry.Authentication;
|
||||
requires_graph = Command_id.requires_graph id;
|
||||
requires_auth = Command_id.requires_auth id;
|
||||
write_command = Command_id.is_write id;
|
||||
human_table_headers_order = Vec.empty;
|
||||
}
|
||||
|
||||
let metadata () =
|
||||
Vec.of_array [| meta Command_id.Login "Login"; meta Logout "Logout" |]
|
||||
|
||||
let execute action config =
|
||||
let (Output.Mode.Packed mode) = Output_mode.for_config config in
|
||||
execute_with_mode action config mode
|
||||
Reference in New Issue
Block a user