2019-07-06 11:25:15 -07:00
|
|
|
import os
|
2018-09-23 16:39:46 -07:00
|
|
|
import argparse
|
|
|
|
from photoapp.types import User
|
|
|
|
from photoapp.common import pwhash
|
2019-07-04 18:41:57 -07:00
|
|
|
from photoapp.dbutils import get_db_session
|
|
|
|
from tabulate import tabulate
|
2018-09-23 16:39:46 -07:00
|
|
|
|
|
|
|
|
2019-07-04 18:41:57 -07:00
|
|
|
def create_user(s, username, password):
|
2018-09-23 16:39:46 -07:00
|
|
|
s.add(User(name=username, password=pwhash(password)))
|
|
|
|
s.commit()
|
|
|
|
|
|
|
|
|
2019-07-04 18:41:57 -07:00
|
|
|
def list_users(s):
|
|
|
|
print(tabulate([[user.id,
|
|
|
|
user.name] for user in s.query(User).order_by(User.name).all()],
|
|
|
|
headers=["id", "username"]))
|
2018-09-23 16:39:46 -07:00
|
|
|
|
|
|
|
|
2019-07-04 18:41:57 -07:00
|
|
|
def delete_user(s, username):
|
2018-09-23 16:39:46 -07:00
|
|
|
u = s.query(User).filter(User.name == username).first()
|
|
|
|
s.delete(u)
|
|
|
|
s.commit()
|
|
|
|
print("Deleted user {}".format(u.id))
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
parser = argparse.ArgumentParser(description="User manipulation tool")
|
2019-07-06 11:25:15 -07:00
|
|
|
parser.add_argument('-s', '--database', help="sqlalchemy database connection uri",
|
|
|
|
default=os.environ.get("DATABASE_URL")),
|
2019-07-04 18:41:57 -07:00
|
|
|
|
2018-09-23 16:39:46 -07:00
|
|
|
p_mode = parser.add_subparsers(dest='action', help='action to take')
|
|
|
|
|
|
|
|
p_create = p_mode.add_parser('create', help='create user')
|
|
|
|
p_create.add_argument("-u", "--username", help="username", required=True)
|
|
|
|
p_create.add_argument("-p", "--password", help="password", required=True)
|
|
|
|
|
2019-07-04 16:57:45 -07:00
|
|
|
p_mode.add_parser('list', help='list users')
|
2018-09-23 16:39:46 -07:00
|
|
|
|
|
|
|
p_delete = p_mode.add_parser('delete', help='delete users')
|
|
|
|
p_delete.add_argument("-u", "--username", help="username", required=True)
|
|
|
|
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
2019-07-06 11:25:15 -07:00
|
|
|
if not args.database:
|
|
|
|
parser.error("--database or DATABASE_URL is required")
|
|
|
|
|
2019-07-04 18:41:57 -07:00
|
|
|
session = get_db_session(args.database)()
|
2018-09-23 16:39:46 -07:00
|
|
|
|
|
|
|
if args.action == "create":
|
2019-07-04 18:41:57 -07:00
|
|
|
create_user(session, args.username, args.password)
|
2018-09-23 16:39:46 -07:00
|
|
|
elif args.action == "list":
|
2019-07-04 18:41:57 -07:00
|
|
|
list_users(session)
|
2018-09-23 16:39:46 -07:00
|
|
|
elif args.action == "delete":
|
2019-07-04 18:41:57 -07:00
|
|
|
delete_user(session, args.username)
|
2018-09-23 16:39:46 -07:00
|
|
|
else:
|
|
|
|
parser.print_help()
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
main()
|