CoolFace
Apppublic

kingame21/BioTech.ai

sourceHugging Facemitupdated 7mo agoView on Hugging Face
0likes
login.py141 linesDownload Raw Back to views
1import flet as ft2 3from state import AppState4from config import CYAN, TEXT_MAIN, TEXT_GREY, BG_CARD, BG_RESALT, BORDER5from auth import login_user, register_user6 7SP_UID = "biomech.user_id"8SP_USER = "biomech.username"9 10 11def show_login(page: ft.Page, state: AppState, content_area: ft.Container, *, on_success=None):12    remember = ft.Checkbox(label="Resta connesso", value=True)13 14    username = ft.TextField(15        label="Username",16        hint_text="es: mario",17        bgcolor=BG_RESALT,18        color=TEXT_MAIN,19        border_color=BORDER,20        autocorrect=False,21    )22 23    pin = ft.TextField(24        label="PIN (min 4)",25        hint_text="****",26        password=True,27        can_reveal_password=True,28        bgcolor=BG_RESALT,29        color=TEXT_MAIN,30        border_color=BORDER,31        keyboard_type=ft.KeyboardType.NUMBER,32    )33 34    msg = ft.Text("", size=12, color=ft.Colors.RED_700)35 36    async def _persist_session(uid: str, user: str):37        try:38            sp = ft.SharedPreferences(page)39            if remember.value:40                await sp.set(SP_UID, str(uid))41                await sp.set(SP_USER, str(user))42            else:43                await sp.remove(SP_UID)44                await sp.remove(SP_USER)45        except Exception as ex:46            print(f"[WARN] SharedPreferences error: {ex}")47 48    async def do_login(e=None):49        msg.value = ""50        u = (username.value or "").strip()51        p = (pin.value or "").strip()52 53        if not u or not p:54            msg.value = "Inserisci username e PIN."55            page.update()56            return57 58        uid = login_user(u, p)59        if not uid:60            msg.value = "Credenziali errate."61            page.update()62            return63 64        state.username = u.lower()65        state.user_id = str(uid)66 67        await _persist_session(state.user_id, state.username)68 69        if callable(on_success):70            on_success()71        page.update()72 73    async def do_register(e=None):74        msg.value = ""75        u = (username.value or "").strip()76        p = (pin.value or "").strip()77 78        if not u or not p:79            msg.value = "Inserisci username e PIN."80            page.update()81            return82 83        try:84            uid = register_user(u, p)85        except Exception as ex:86            msg.value = str(ex)87            page.update()88            return89 90        state.username = u.lower()91        state.user_id = str(uid)92 93        await _persist_session(state.user_id, state.username)94 95        if callable(on_success):96            on_success()97        page.update()98 99    content_area.content = ft.Column(100        [101            ft.Container(height=30),102            ft.Text("BIOMECH AI", size=30, weight="bold", color=TEXT_MAIN),103            ft.Text("Accedi o crea un account", size=12, color=TEXT_GREY),104            ft.Container(height=16),105            ft.Container(106                content=ft.Column(107                    [108                        username,109                        pin,110                        remember,111                        msg,112                        ft.Row(113                            [114                                ft.FilledButton(115                                    "ACCEDI",116                                    on_click=do_login,117                                    style=ft.ButtonStyle(bgcolor=CYAN, color="white"),118                                ),119                                ft.OutlinedButton(120                                    "REGISTRATI",121                                    on_click=do_register,122                                    style=ft.ButtonStyle(color=TEXT_MAIN, side=ft.BorderSide(1, BORDER)),123                                ),124                            ],125                            alignment=ft.MainAxisAlignment.CENTER,126                            spacing=12,127                        ),128                    ],129                    spacing=12,130                ),131                padding=20,132                bgcolor=BG_CARD,133                border_radius=16,134                border=ft.Border.all(1, BORDER),135                width=360,136            ),137        ],138        horizontal_alignment=ft.CrossAxisAlignment.CENTER,139        spacing=10,140    )141    page.update()