summaryrefslogtreecommitdiffstats
path: root/girok/girok.py
blob: a5e3ffa8c60cf4b855582683ba3bde0bfd88248c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
from pathlib import Path
import os
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.api.auth as auth_api
import girok.commands.auth as auth_command
import girok.commands.category as category_command
import girok.commands.task as task_command
import girok.commands.calendar as calendar_command
import girok.commands.info as info_command
import girok.utils.general as general_utils
import girok.utils.auth as auth_utils
import girok.utils.display as display_utils

app = typer.Typer(rich_markup_mode='rich', help="Enter [red]girok <command name> --help[/red] to see more detailed documentations of commands!")
app.registered_commands.extend(auth_command.app.registered_commands)
app.registered_commands.extend(category_command.app.registered_commands)
app.registered_commands.extend(task_command.app.registered_commands)
app.registered_commands.extend(calendar_command.app.registered_commands)
# app.registered_commands.extend(info_command.app.registered_commands)
cfg = get_config()

def version_callback(value: bool):
    if value:
        print(f"[yellow]{cfg.version}[/yellow]")
        raise typer.Exit()
    
@app.callback()
def pre_command_callback(ctx: typer.Context, version: bool = typer.Option(None, "--version", callback=version_callback, is_eager=True),):
    cmd = ctx.invoked_subcommand
    
    # Setting up app dir and config file if they don't exist
    general_utils.config_setup(cfg.app_dir, cfg.config_path)

    # Authentication status check
    if cmd == "guest":
        # Check if logged-out
        mode = auth_utils.get_mode(cfg.config_path)
        if mode != "off":
            print(f"You're already logged in as [green]{mode}[/green]. Please log out and try again.")
            exit(0)
        return
    elif cmd == "login":
        # Check if logged-out
        mode = auth_utils.get_mode(cfg.config_path)
        if mode != "off":
            print(f"You're already logged in as [green]{mode}[/green]. Please log out and try again.")
            exit(0)
        return
    elif cmd == "logout":
        # Check if logged-in
        mode = auth_utils.get_mode(cfg.config_path)
        if mode not in ["guest", "user"]:
            print("You're not logged in.")
            exit(0)
        return
    elif cmd == "register":
        mode = auth_utils.get_mode(cfg.config_path)
        if mode != "off":
            print(f"You're already logged in as [green]{mode}[/green]. Please log out and try again.")
            exit(0)
        return
    elif cmd == "mode":
        return
    else: # non-auth commands
        # Check if logged-in
        mode = auth_utils.get_mode(cfg.config_path)
        if mode == "off":
            print("You're not logged in. Please login with [green]girok login[/green] or [green]girok guest[/green].")
            exit(0)
        elif mode == "guest":
            pass
        elif mode == "user":
            if not auth_utils.is_logged_in_as_user(cfg.config_path):
                print("You're not logged in. Please login with [green]girok login[/green or [green]girok guest[/green].")
                exit(0)
        else:
            raise Exception("Unexpected Authentication")
        

    # if ctx.invoked_subcommand in ['login', 'logout', 'register']:
    #     return
        
    # # Check if JWT is stored in config file
    # 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: # invalid(or expired) JWT -> login again
    #         print("You're not logged in. Please login with [green]girok login[/green].")
    #         exit(0)
    # else:
    #     print("You're not logged in. Please login with [green]girok login[/green].")
    #     exit(0)