summaryrefslogtreecommitdiffstats
path: root/g4f/gui/server/website.py
blob: 9aa98b76a02dc4d7c85f708f3d6505851bb81cbf (plain) (blame)
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
from flask import render_template, send_file, redirect
from time import time
from os import urandom
import sys, os

if getattr(sys, 'frozen', False):
    assets_folder = os.path.join(sys._MEIPASS, "client")
else:
    assets_folder = "./../client"

class Website:
    def __init__(self, app) -> None:
        self.app = app
        self.routes = {
            '/': {
                'function': lambda: redirect('/chat'),
                'methods': ['GET', 'POST']
            },
            '/chat/': {
                'function': self._index,
                'methods': ['GET', 'POST']
            },
            '/chat/<conversation_id>': {
                'function': self._chat,
                'methods': ['GET', 'POST']
            },
            '/assets/<folder>/<file>': {
                'function': self._assets,
                'methods': ['GET', 'POST']
            }
        }

    def _chat(self, conversation_id):
        if '-' not in conversation_id:
            return redirect('/chat')

        return render_template('index.html', chat_id = conversation_id)

    def _index(self):
        return render_template('index.html', chat_id = f'{urandom(4).hex()}-{urandom(2).hex()}-{urandom(2).hex()}-{urandom(2).hex()}-{hex(int(time() * 1000))[2:]}')

    def _assets(self, folder: str, file: str):
        try:
            return send_file(f"{assets_folder}/{folder}/{file}", as_attachment=False)
        except:
            return "File not found", 404