summaryrefslogtreecommitdiffstats
path: root/girok/commands/auth.py
diff options
context:
space:
mode:
Diffstat (limited to 'girok/commands/auth.py')
-rw-r--r--girok/commands/auth.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/girok/commands/auth.py b/girok/commands/auth.py
new file mode 100644
index 0000000..5d6660b
--- /dev/null
+++ b/girok/commands/auth.py
@@ -0,0 +1,89 @@
+from pathlib import Path
+import os.path as osp
+
+import typer
+from rich import print
+from rich.console import Console
+from rich.table import Table
+
+from girok.config import get_config
+import girok.utils.general as general_utils
+import girok.utils.auth as auth_utils
+import girok.api.auth as auth_api
+
+app = typer.Typer(rich_markup_mode='rich')
+
+cfg = get_config()
+
+@app.command("login")
+def login():
+ # Check if the user holds a valid JWT (logged in)
+ stored_access_token = auth_utils.get_access_token_from_json(cfg.config_path)
+ if stored_access_token:
+ resp = auth_api.validate_access_token(stored_access_token)
+ if resp.status_code == 200:
+ print("You have already logged in. Enjoy!")
+ exit(0)
+
+ # Log-in
+ print("Please login to proceed")
+ email = typer.prompt("Enter email address")
+ password = typer.prompt("Enter password", hide_input=True)
+
+ resp = auth_api.login(email, password)
+ if resp.status_code == 200:
+ access_token = general_utils.bytes2dict(resp.content)['access_token']
+ general_utils.update_json(cfg.config_path, {"access_token": access_token, "email": email})
+ print("You're logged in!")
+
+ else:
+ print("Login failed. Please try again with [green]girok login[/green]")
+ exit(0)
+ exit(0)
+
+
+@app.command("logout")
+def logout():
+ access_token = auth_utils.get_access_token_from_json(cfg.config_path)
+ if not auth_utils.is_logged_in(access_token):
+ print("You're not logged in.")
+ exit(0)
+
+ auth_utils.remove_access_token(cfg.config_path)
+ print("Successfully logged out")
+ exit(0)
+
+
+
+@app.command("register")
+def register():
+ access_token = auth_utils.get_access_token_from_json(cfg.config_path)
+ if access_token and auth_utils.is_logged_in(access_token):
+ print("You're logged in. Please try after log out.")
+ exit(0)
+
+ print(":star: This is your first time to use [yellow]girok[/yellow]! :star:\n")
+ is_register = typer.confirm("Do you want to register a new account?")
+ if is_register:
+ email = typer.prompt("Enter email address")
+ password = typer.prompt("Enter password", hide_input=True)
+ confirm_password = typer.prompt("Confirm password", hide_input=True)
+ auth_utils.match_passwords(password, confirm_password)
+
+ # register a new account
+ register_resp = auth_api.register(email, password)
+ if register_resp.status_code == 201:
+ print("Register complete!")
+ else:
+ register_resp_content = general_utils.bytes2dict(register_resp.content)
+ if register_resp.status_code == 400:
+ print(register_resp_content['detail'])
+ exit(0)
+
+ print("Registration successful! Please login by [green]girok login[/green] command")
+ exit(0)
+ else:
+ exit(0)
+
+if __name__ == '__main__':
+ app() \ No newline at end of file