-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathservice_func.py
More file actions
340 lines (271 loc) · 9.31 KB
/
Copy pathservice_func.py
File metadata and controls
340 lines (271 loc) · 9.31 KB
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
from werkzeug.security import generate_password_hash, check_password_hash
import global_var as gv
def hash_password(password):
hashed_password = generate_password_hash(password)
return hashed_password
def check_password(password, hash):
return check_password_hash(hash, password)
def quick_share(ret=None):
if ret == 'extension':
return quick_share().split('.')[-1]
return gv.quick_src if gv.quick_src else gv.no_image
def debugOutput(*args, **kwargs):
if gv.debug:
from datetime import datetime
print(datetime.now(), ' - ', *args, **kwargs)
def getIP():
"""
nothing special just returns IPv4 of this pc (mac is not a pc!)
(c) Lunar
"""
import socket
from sys import platform
if platform in ("linux", "linux2", "win32"):
if socket.gethostbyname(socket.gethostname()).split('.')[0] != '172':
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
return s.getsockname()[0]
else:
return '0.0.0.0'
elif platform == "darwin":
debugOutput(r"""you're running MacOS, i'm not gonna support that shit.""") # sorry
def available_user_addresses(user_name, address_dir=None):
from data import db_session
from data.users import User
if user_name.lower() is "admin":
return True
if address_dir:
'''
It displays that the user has access to the folder (parameters are taken from the db)
'''
session = db_session.create_session()
user = session.query(User).filter(User.name == user_name).first()
if user.dirs:
dirs_user = [i.replace(r'\\', '/').replace('\\', '/') for i in user.dirs.split(',')]
debugOutput("tried to access:", address_dir, "; has access to:", dirs_user)
for dir in dirs_user:
if dir in address_dir:
return True
return False
else:
'''
Displays the entire list of dir that the user has access to
'''
session = db_session.create_session()
user = session.query(User).filter(User.name == user_name).first()
if user.dirs:
dirs_user = [i.replace(r'\\', '/').replace('\\', '/') for i in user.dirs.split(',')]
return dirs_user
return []
def does_this_directory_already_exist(user_name, address_dir):
"""
"""
from data import db_session
from data.users import User
session = db_session.create_session()
user = session.query(User).filter(User.name == user_name).first()
if user.dirs:
dirs_user = user.dirs.split(',')
for dir in dirs_user:
if dir in address_dir:
return True
return False
def checking_dir_when_adding(address_dir):
"""
Stupidly checks if the full address
"""
from sys import platform
if platform in ("linux", "linux2"):
return address_dir.count('/')
elif platform == "win32":
address_dir = address_dir.replace('/', '\\')
return address_dir[1] == ':' and address_dir[0] == address_dir[0].upper() and address_dir[2] == '\\'
elif platform == "darwin":
debugOutput(r"""you're running MacOS, i'm not gonna support that shit.""") # sorry
return False
def getDefaultHome():
"""
"""
from sys import platform
if platform in ("linux", "linux2"):
return "~;;"
elif platform == "win32":
return "C:;;"
elif platform == "darwin":
debugOutput(r"""you're running MacOS, i'm not gonna support that shit.""") # sorry
assert ValueError
return None
def generateQR():
import qrcode
img = qrcode.make('http://' + getIP() + ':' + str(gv.port))
img.save("static/img/qr.png")
def convert_path(path, link=False):
ll = path.replace('/', gv.url_path_separation).replace('\\', gv.url_path_separation)
if link:
if link == 'qs':
return '/qs/' + ll
else:
return '/q/' + ll
return ll
def generate_dir(path, qs=False):
import os
prefix = '/qs/' if qs else '/q/'
try:
list_dir = os.listdir(path)
except PermissionError as e:
return [(prefix + convert_path(os.path.split(path)[0]),
'Sorry, you have no permissions. Click here to go back')],[]
except FileNotFoundError as e:
return [(prefix + convert_path(os.path.split(path)[0]),
'Sorry, this file does not exist. Click here to go back')],[]
ret, hidden_files = [], []
split_path = os.path.split(path)
upperfolderAllowed = True
try:
tmp = os.listdir('/'.join(split_path[:-1]))
except PermissionError as e:
upperfolderAllowed = False
if split_path[-1] and upperfolderAllowed:
ret.append((
prefix + convert_path('/'.join(split_path[:-1])),
'...'
))
for i in list_dir:
if i[0] == '.':
hidden_files.append((
prefix + convert_path(os.path.join(path, i)),
i
))
else:
ret.append((
prefix + convert_path(os.path.join(path, i)),
i
))
return ret, hidden_files
def qsgenerate_dir(path):
pass
def setqs(src):
import os
import sys
from shutil import copyfile
cwd = os.getcwd()
path, filename = os.path.split(src)
extension = filename.split('.')[-1]
dst = str(sys.path[0]) + '/static/qs.' + extension
with open(dst, 'w+'):
pass
copyfile(src, dst)
gv.quick_src = '/static/qs.' + extension
def generate_token():
import secrets
return secrets.token_urlsafe(16)
def compToken(login, token):
true_token = get_token(login)
return true_token == token
def id_to_login(id):
from data import db_session
from data.users import User
session = db_session.create_session()
login = session.query(User).filter(User.id == id).first()
if not login:
return 'error'
return login.name
def login_to_id(login):
from data import db_session
from data.users import User
session = db_session.create_session()
id = session.query(User).filter(User.name == login).first().id
print('id', type(id))
return id if id else 'error'
def change_token(login, new_token, old_token=None):
from data import db_session
from data.settings import Settings
session = db_session.create_session()
if old_token:
user_set = session.query(Settings).filter(Settings.id == login_to_id(login),
Settings.token == old_token).first()
if not user_set:
return 'error'
user_set.token = new_token
session.commit()
return 'ok'
else:
user_set = session.query(Settings).filter(Settings.id == login_to_id(login)).first()
if not user_set:
return 'error'
user_set.token = new_token
session.commit()
return 'ok'
def get_token(login):
from data import db_session
from data.settings import Settings
session = db_session.create_session()
users = session.query(Settings).filter(Settings.id == login_to_id(login))
print('users', users, type(users))
user = users.first()
print(user)
return user.token if user else 'error'
def token_to_login(token):
from data import db_session
from data.settings import Settings
session = db_session.create_session()
ids = session.query(Settings).filter(Settings.token == token)
if ids:
id = ids[0].id
return id_to_login(id)
else:
return None
def get_user(id_user):
from data import db_session
session = db_session.create_session()
from data.users import User
user = session.query(User).get(id_user)
return user
def change_password(user_name=None, pass_old=None, pass_new=None):
if user_name and pass_new and pass_old:
try:
from data import db_session
session = db_session.create_session()
from data.users import User
user = session.query(User).filter(User.name == user_name).first()
print('pass_old', pass_old)
print('user.hashed_password', user.hashed_password)
if user.check_password(pass_old):
print('changed password for user')
user.set_password(pass_new)
session.commit()
return True
else:
return False
except Exception:
return False
else:
return False
def get_theme(cur_user=None):
if not cur_user or cur_user.is_authenticated == False:
return True
id = cur_user.id
from data import db_session
session = db_session.create_session()
from data.settings import Settings
sett = session.query(Settings).filter(Settings.id == id).first()
print(id)
if sett.theme == "dark":
return True
else:
return False
def change_theme(cur_user=None):
if not cur_user:
return False
from data import db_session
session = db_session.create_session()
from data.settings import Settings
sett = session.query(Settings).filter(Settings.id == cur_user.id).first()
if sett:
if sett.theme == 'dark':
sett.theme = 'light'
else:
sett.theme = 'dark'
session.commit()
return True
return False