From 83442b497795616e33e81e6938c59fa4c2482027 Mon Sep 17 00:00:00 2001 From: Shyam Sunder Date: Thu, 15 Aug 2019 21:53:57 -0400 Subject: server/tools: created simple admin command script --- server/szuru-admin | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100755 server/szuru-admin (limited to 'server/szuru-admin') diff --git a/server/szuru-admin b/server/szuru-admin new file mode 100755 index 0000000..5fe54c1 --- /dev/null +++ b/server/szuru-admin @@ -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='', + 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() -- cgit v1.3