You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: lfss/cli/user.py
+31-2Lines changed: 31 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
importargparse, asyncio, os
2
2
fromcontextlibimportasynccontextmanager
3
3
from .cliimportparse_permission, FileReadPermission
4
-
from ..eng.utilsimportparse_storage_size, fmt_storage_size
4
+
from ..eng.utilsimportparse_storage_size, fmt_storage_size, fmt_sec_time
5
5
from ..eng.datatypeimportAccessLevel
6
6
from ..eng.databaseimportDatabase, FileReadPermission, transaction, UserConn, unique_cursor, FileConn
7
7
from ..eng.connection_poolimportglobal_entrance
@@ -17,6 +17,11 @@ async def _main():
17
17
sp_add.add_argument('--admin', action='store_true', help='Set user as admin')
18
18
sp_add.add_argument("--permission", type=parse_permission, default=FileReadPermission.UNSET, help="File fallback read permission, can be public, protected, private, or unset")
19
19
sp_add.add_argument('--max-storage', type=parse_storage_size, default="10G", help="Maximum storage size, e.g. 1G, 100M, 10K, default is 10G")
20
+
21
+
sp_add_virtual=sp.add_parser('add-virtual', help="Add a virtual (hidden) user, username will be prefixed with '.v-'")
22
+
sp_add_virtual.add_argument('--tag', type=str, default=None, help="Tag for the virtual user, will be embedded in the username for easier identification")
23
+
sp_add_virtual.add_argument('--peers', type=str, default="", help="Peer users and their access levels in the format 'READ:user1,user2;WRITE:user3'")
24
+
sp_add_virtual.add_argument('--max-storage', type=parse_storage_size, default="1G", help="Maximum storage size for the virtual user, e.g. 1G, 100M, 10K, default is 1G")
sp_expire.add_argument('expire_time', type=str, nargs='?', default=None, help="Expire time in seconds or a string like '1d2h3m4s'. If not provided, the user will never expire.")
awaitself.cur.execute("SELECT * FROM user where username LIKE '.%'")
135
158
forrecordinawaitself.cur.fetchall():
136
159
yieldself.parse_record(record)
137
160
138
161
asyncdefset_active(self, username: str):
139
162
awaitself.cur.execute("UPDATE user SET last_active = CURRENT_TIMESTAMP WHERE username = ?", (username, ))
140
163
141
164
asyncdefdelete_user(self, username: str):
165
+
""" Note: this will not delete files owned by the user, please use higher level API to delete user and files together. """
142
166
awaitself.cur.execute("DELETE FROM upeer WHERE src_user_id = (SELECT id FROM user WHERE username = ?) OR dst_user_id = (SELECT id FROM user WHERE username = ?)", (username, username))
143
167
awaitself.cur.execute("DELETE FROM user WHERE username = ?", (username, ))
168
+
awaitself.cur.execute("DELETE FROM usize WHERE user_id = (SELECT id FROM user WHERE username = ?)", (username, ))
169
+
awaitself.cur.execute("DELETE FROM uexpire WHERE user_id = (SELECT id FROM user WHERE username = ?)", (username, ))
0 commit comments