mirror of
https://github.com/rr-/szurubooru.git
synced 2025-07-17 08:26:24 +00:00
server/tools: created simple admin command script
This commit is contained in:
75
server/szuru-admin
Executable file
75
server/szuru-admin
Executable file
@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
'''
|
||||
Collection of CLI commands for an administrator to use
|
||||
'''
|
||||
|
||||
import logging
|
||||
import time
|
||||
from argparse import ArgumentParser
|
||||
from getpass import getpass
|
||||
from sys import stderr
|
||||
|
||||
from szurubooru import db, errors, model
|
||||
from szurubooru.func import files, images, posts as postfuncs, users as userfuncs
|
||||
|
||||
|
||||
def reset_password(username: str) -> None:
|
||||
user = userfuncs.get_user_by_name_or_email(username)
|
||||
|
||||
new_password = getpass('Enter new password for \'%s\': ' % user.name)
|
||||
check_password = getpass('Re-enter password: ')
|
||||
|
||||
if check_password != new_password:
|
||||
raise errors.ValidationError('Passwords do not match')
|
||||
|
||||
userfuncs.update_user_password(user, new_password)
|
||||
db.get_session().commit()
|
||||
print('Sucessfully changed password for \'%s\'' % user.name)
|
||||
|
||||
|
||||
def check_audio() -> None:
|
||||
post_list = (db.session
|
||||
.query(model.Post)
|
||||
.filter(model.Post.type == model.Post.TYPE_VIDEO)
|
||||
.order_by(model.Post.post_id)
|
||||
.all())
|
||||
|
||||
for post in post_list:
|
||||
print('Checking post %d ...' % post.post_id, end='\r')
|
||||
content = files.get(postfuncs.get_post_content_path(post))
|
||||
|
||||
has_existing_flag = model.Post.FLAG_SOUND in post.flags
|
||||
try:
|
||||
has_sound_data = images.Image(content).check_for_sound()
|
||||
except errors.ProcessingError:
|
||||
print('Post %d caused an error when checking for sound' % post.post_id)
|
||||
|
||||
if has_sound_data and not has_existing_flag:
|
||||
print('Post %d has sound data but is not flagged' % post.post_id)
|
||||
if not has_sound_data and has_existing_flag:
|
||||
print('Post %d has no sound data but is flagged' % post.post_id)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser_top = ArgumentParser(
|
||||
description='Collection of CLI commands for an administrator to use',
|
||||
epilog='Look at README.md for more info')
|
||||
parser = parser_top.add_mutually_exclusive_group(required=True)
|
||||
parser.add_argument('--change-password', metavar='<username>',
|
||||
help='change the password of specified user')
|
||||
parser.add_argument('--check-all-audio', action='store_true',
|
||||
help='check the audio flags of all posts, noting discrepancies, without modifying posts')
|
||||
command = parser_top.parse_args()
|
||||
|
||||
try:
|
||||
if command.change_password:
|
||||
reset_password(command.change_password)
|
||||
elif command.check_all_audio:
|
||||
check_audio()
|
||||
except errors.BaseError as e:
|
||||
print(e, file=stderr)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Reference in New Issue
Block a user