def create_initial_user(): username = os.getenv("INIT_USERNAME", "admin") password = os.getenv("INIT_PASSWORD", "admin_pass") users = mongo.Users() if users.find_one() is None: print(f"creating initial user `{username}`") document = { "username": username, "password_hash": generate_password_hash(password), "scope": ROLES.get("admin"), } users.insert_one(document)
def post(self, token: AccessToken.Payload): try: request_json = UserCreateSchema().load(request.get_json()) except ValidationError as e: raise errors.InvalidRequestJSON(e.messages) # generate password hash password = request_json.pop("password") request_json["password_hash"] = generate_password_hash(password) # fetch permissions request_json["scope"] = ROLES.get(request_json.pop("role")) try: user_id = Users().insert_one(request_json).inserted_id return jsonify({"_id": user_id}) except DuplicateKeyError: raise errors.BadRequest("User already exists")
def patch(self, token: AccessToken.Payload, username: str): # find user based on username query = {"username": username} if Users().count_documents(query) != 1: raise errors.NotFound() try: request_json = UserUpdateSchema().load(request.get_json()) except ValidationError as e: raise errors.BadRequest(e.messages) update = {} if "email" in request_json: update["email"] = request_json["email"] if "role" in request_json: update["scope"] = ROLES.get(request_json["role"]) Users().update_one(query, {"$set": update}) return Response(status=HTTPStatus.NO_CONTENT)
def _make_user(username: str = "some-user", role: str = None) -> dict: document = { "_id": ObjectId(), "username": username, "password_hash": "pbkdf2:sha256:150000$dEqsZI8W$2d2bbcbadab59281528ecbb27d26ac628472a0b2f0a5e1828edbeeae683dd40f", "ssh_keys": [{ "name": "pytest", "fingerprint": "a4a7cfd26a11ec519b63d4d12f34ecf2", "key": "AAAAB3NzaC1yc2EAAAADAQABAAABAQC4EYmNPfdscaYcMTXe0NxSpS+5qbVO+WDaMLt/JLbDmorJzzBYFItxsr5hvxKckQ3jgUdcoIqzpwfjg88NhxenPmLlqsaQfkI2IjmOxDwaH4zs1IKG4+BTyY6EFrEnWgO9vJMJPOVzBdv3uUUOULvTnE7ZWpqb+2tRQCk6GUF9AoajmAzTlu+PjD53kRqwRugK/EKrqIjg5Nb/y5F4xGXLTb3otsUp+iFB3TJ65yB9F4C/Q4R5Srr/R3CWBQvoMLHUjya7HppoEW5sl8e+nEYpwKVCVuyJiRv9NuomBuh2ZH7ftfY8zxkVyv6UbVNXwFTvT3QVbwM6pQgVx/nJmzeb", "type": "RSA", "added": datetime.datetime(2019, 1, 1), "last_used": datetime.datetime(2019, 1, 1), "pkcs8_key": "-----BEGIN PUBLIC KEY-----\n" "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuBGJjT33bHGmHDE13tDc\n" "UqUvuam1Tvlg2jC7fyS2w5qKyc8wWBSLcbK+Yb8SnJEN44FHXKCKs6cH44PPDYcX\n" "pz5i5arGkH5CNiI5jsQ8Gh+M7NSChuPgU8mOhBaxJ1oDvbyTCTzlcwXb97lFDlC7\n" "05xO2Vqam/trUUApOhlBfQKGo5gM05bvj4w+d5EasEboCvxCq6iI4OTW/8uReMRl\n" "y0296LbFKfohQd0yeucgfReAv0OEeUq6/0dwlgUL6DCx1I8mux6aaBFubJfHvpxG\n" "KcClQlbsiYkb/TbqJgbodmR+37X2PM8ZFcr+lG1TV8BU7090FW8DOqUIFcf5yZs3\n" "mwIDAQAB\n" "-----END PUBLIC KEY-----\n", }], } if role: document["scope"] = ROLES.get(role) user_id = database.users.insert_one(document).inserted_id user_ids.append(user_id) return document
def access_token(): token = LoadedAccessToken(ObjectId(), "username", ROLES.get("admin")).encode() yield "Bearer {}".format(token)
from marshmallow import fields, validate from common.roles import ROLES from common.enum import ( Offliner, ScheduleCategory, TaskStatus, SchedulePeriodicity, Platform, ) # validators validate_priority = validate.Range(min=0, max=10) validate_schedule_name = validate.Length(min=2) validate_not_empty = validate.Length(min=1) validate_role = validate.OneOf(ROLES.keys()) validate_cpu = validate.Range(min=0) validate_memory = validate.Range(min=0) validate_disk = validate.Range(min=0) validate_lang_code = validate.Length(min=2, max=3) validate_output = validate.Equal("/output") validate_category = validate.OneOf(ScheduleCategory.all()) validate_warehouse_path = validate.OneOf( ScheduleCategory.all_warehouse_paths()) validate_offliner = validate.OneOf(Offliner.all()) validate_status = validate.OneOf(TaskStatus.all()) validate_event = validate.OneOf(TaskStatus.all_events()) validate_worker_name = validate.Length(min=3) validate_periodicity = validate.OneOf(SchedulePeriodicity.all()) validate_platform = validate.OneOf(Platform.all()) validate_platform_value = validate.Range(min=0)