1+ from flask import Flask , request
2+ from difflib import SequenceMatcher
3+ from ollama_model import *
4+ from lang import *
5+
6+ user = configparser .ConfigParser ()
7+ user .read ('user.ini' )
8+
9+ app = Flask (__name__ )
10+
11+ check = 0
12+
13+ def password_recovery_func (username , password , threshold = 0.7 ):
14+ user_password = user [username ]["password" ]
15+ ratio = SequenceMatcher (None , user_password , password ).ratio ()
16+ if ratio >= threshold :
17+ password = user [username ]["password" ]
18+ return f"{ your_password } : { password } "
19+ else :
20+ return f"{ password_recovery_failed } "
21+
22+ @app .route ('/' , methods = ['GET' , 'POST' ])
23+ def home ():
24+ if request .method == 'POST' :
25+ lang = request .form ['lang' ]
26+ set_lang (lang )
27+ else :
28+ lang = "Language"
29+ global check
30+ check = 0
31+ return f"""
32+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
33+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 34+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 35+ <title>{ app_title } </title>
36+ <h1 class="ms-2">{ app_title } </h1>
37+ <form action="/" method="post">
38+ <select class="form-select form-select-sm position-absolute end-0 me-2" onchange="this.form.submit()" name="lang" style="top: 7px; width: 15%;">
39+ <option value="" disabled selected hidden>{ lang } </option>
40+ <option value="TR">TR</option>
41+ <option value="EN">EN</option>
42+ </select>
43+ </form>
44+ <form action="/login" method="post">
45+ <input class="form-control form-control-sm w-75 ms-2" type="text" name="username" placeholder="{ user_name_input } "/> <br>
46+ <input class="form-control form-control-sm w-75 ms-2" type="password" name="password" placeholder="{ password_input } "/> <br>
47+ <input class="btn btn-primary ms-2" type="submit" value="{ login_var } "/>
48+ </form>
49+ <a class="btn btn-primary ms-2" href="/user">{ new_user_register } </a>
50+ """
51+
52+ @app .route ('/login' , methods = ['POST' ])
53+ def login ():
54+ global check
55+ username = request .form ['username' ]
56+ password = request .form ['password' ]
57+
58+ if username in user and user [username ]["password" ] == password :
59+ check = 1
60+ return f"""
61+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 62+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 63+ <title>{ login_successfully } </title>
64+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
65+ <h1 class="ms-2">{ login_successfully } </h1> <p class="ms-2">{ welcome } , { username } </p>
66+ <a class="btn btn-primary ms-2" href="/app">{ go_to_app } </a>
67+ """
68+ else :
69+ username = request .form ['username' ]
70+ return f"""
71+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
72+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 73+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 74+ <title>{ login_failed } </title>
75+ <h1 class="ms-2">{ login_failed } </h1> <p class="ms-2">{ login_failed_description } </p>
76+ <form action="/passrecovery" method="post">
77+ <input type="hidden" name="username" value="{ username } "/>
78+ <a class="btn btn-primary ms-2" href="/user">{ user_register } </a><a class="btn btn-primary ms-2" href="/">{ try_again } </a>
79+ <br>
80+ <input class="btn btn-primary ms-2 mt-2" type="submit" value="{ password_forget } "/>
81+ </form>
82+ """
83+
84+ @app .route ('/passrecovery' , methods = ['GET' , 'POST' ])
85+ def pass_recovery ():
86+ if request .method == 'POST' :
87+ username = request .form ['username' ]
88+ return f"""
89+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
90+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 91+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 92+ <title>{ password_recovery } </title>
93+ <h1 class="ms-2">{ password_recovery } </h1>
94+ <p class="ms-2">{ username } { password_recovery_ } </p>
95+ <form action="/recovery" method="post">
96+ <input type="hidden" name="username" value="{ username } "/>
97+ <input class="form-control form-control-sm w-75 ms-2" type="password" name="password" placeholder="{ password_recovery_input } { username } { pass_rec_ } "/> <br>
98+ <input class="btn btn-primary ms-2" type="submit" value="{ password_recovery_submit } "/>
99+ </form>
100+ """
101+ @app .route ('/recovery' , methods = ['GET' , 'POST' ])
102+ def recovery ():
103+ if request .method == 'POST' :
104+ username = request .form ['username' ]
105+ password = request .form ['password' ]
106+ return f"""
107+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
108+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 109+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 110+ <title>{ password_recovery_report } </title>
111+ <h1 class="ms-2">{ password_recovery_report } </h1>
112+ <p class="ms-2">{ password_recovery_func (username , password )} </p>
113+ <a class="btn btn-primary ms-2" href="/">{ try_again } </a>
114+ """
115+
116+ @app .route ('/user' )
117+ def user_form ():
118+ if request .method == 'POST' :
119+ username = request .form ['username' ]
120+
121+ if username in user :
122+ return f"""
123+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
124+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 125+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 126+ <title>{ user_register_failed } </title>
127+ <h1>{ user_register_failed } </h1>
128+ <a href="/user">{ try_again } </a>
129+ """
130+
131+ return f"""
132+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
133+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 134+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 135+ <title>{ new_user_register } </title>
136+ <h1 class="ms-2">{ new_user_register } </h1>
137+ <form action="/adduser" method="post">
138+ <input class="form-control form-control-sm w-75 ms-2" type="text" name="username" placeholder="{ user_name_input } "/> <br>
139+ <input class="form-control form-control-sm w-75 ms-2" type="password" name="password" placeholder="{ password_input } "/> <br>
140+ <input class="btn btn-primary ms-2" type="submit" value="{ register } "/>
141+ </form>
142+ """
143+
144+ @app .route ('/adduser' , methods = ['POST' ])
145+ def add_user ():
146+ username = request .form ['username' ]
147+ password = request .form ['password' ]
148+ ip_address = request .remote_addr
149+ if user .has_section (f"{ username } " ):
150+ return f"""
151+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 152+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 153+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
154+ <h1 class="ms-2">{ user_register_failed_title } </h1> <p class="ms-2">{ user_register_failed } </p>
155+ <a class="btn btn-primary ms-2" href="/user">{ try_again } </a>
156+ """
157+ for section in user .sections ():
158+ if user [section ]["ip_address" ] == ip_address :
159+ return f"""
160+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 161+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 162+ <title>{ user_register_failed_title } </title>
163+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
164+ <h1 class="ms-2">{ user_register_failed_title } </h1> <p class="ms-2">{ user_register_ip } </p>
165+ <a class="btn btn-primary ms-2" href="/user">{ try_again } </a>
166+ """
167+ else :
168+ if password == "" :
169+ return f"""
170+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
171+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 172+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 173+ <title>{ user_register_failed_title } </title>
174+ <h1 class="ms-2">{ user_register_failed_title } </h1> <p class="ms-2">{ user_register_failed_description } </p>
175+ <a class="btn btn-primary ms-2" href="/user">{ try_again } </a>
176+ """
177+ user_ip = request .remote_addr
178+ user .add_section (f"{ username } " )
179+ user .set (f"{ username } " , "password" , f"{ password } " )
180+ user .set (f"{ username } " , "ip_address" , f"{ user_ip } " )
181+ with open ("user.ini" , "w" ) as configfile :
182+ user .write (configfile )
183+ return f"""
184+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
185+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 186+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 187+ <title>{ user_register_successfully } </title>
188+ <h1 class="ms-2">{ user_register_successfully } </h1> <p class="ms-2">{ user_register_successfully_description } </p>
189+ <a class="btn btn-primary ms-2" href="/">{ login_var } </a>
190+ """
191+
192+ @app .route ('/app' , methods = ['GET' , 'POST' ])
193+ def app_page ():
194+ if check == 1 :
195+ return f"""
196+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
197+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 198+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 199+ <title>{ ollama_web_ui_title } </title>
200+ <h1 class="ms-2">{ ollama_web_ui_title } </h1>
201+ <form action="/chat" method="post">
202+ <input class="form-control form-control-sm w-75 ms-2" type="text" name="model" placeholder="{ user_model } "/>
203+ <input class="form-control form-control-sm w-75 ms-2 mt-2" type="text" name="msg" placeholder="{ model_question } "/> <br>
204+ <input class="btn btn-primary ms-2" type="submit" value="{ model_submit } "/>
205+ </form>
206+ <a class="btn btn-primary ms-2" href="/">{ exit } </a>
207+ """
208+ else :
209+ return f"""
210+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
211+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 212+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 213+ <title>{ app_requirements } </title>
214+ <h1 class="ms-2">{ app_requirements } </h1>
215+ <p class="ms-2">{ app_requirements_description } </p>
216+ <a class="btn btn-primary ms-2" href="/">{ login_var } </a>
217+ """
218+ @app .route ('/chat' , methods = ['GET' , 'POST' ])
219+ def chat ():
220+ if request .method == "POST" :
221+ model = request .form ["model" ]
222+ msg = request .form ["msg" ]
223+ user_response = f"{ user_ } : { msg } "
224+ model_response = load_model (model , msg )
225+ return f"""
226+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
227+ <link href="https://cdn.jsdelivr.net/npm/[email protected] /dist/css/bootstrap.min.css" rel="stylesheet"> 228+ <script src="https://cdn.jsdelivr.net/npm/[email protected] /dist/js/bootstrap.bundle.min.js"></script> 229+ <title>{ model } </title>
230+ <p class="alert alert-primary w-75 ms-2 mt-2">{ user_response } </p>
231+ <p class="alert alert-success w-75 ms-2">{ model } : { model_response } </p>
232+ <form action="/chat" method="post">
233+ <input type="hidden" name="model" value="{ model } "/>
234+ <input class="form-control form-control-sm w-75 ms-2" type="text" name="msg" placeholder="{ model_question } "/>
235+ <input class="btn btn-primary ms-2 mt-2" type="submit" value="{ model_submit } "/>
236+ </form>
237+ <a class="btn btn-primary ms-2" href="/">{ exit } </a>
238+ """
239+
240+ if __name__ == '__main__' :
241+ app .run (host = "0.0.0.0" , port = 5000 , debug = True )
0 commit comments