def post(self, request, repo_id): repo = seafile_api.get_repo(repo_id) if not repo: error_msg = "Library %s not found." % repo_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) password = request.POST.get("password", None) if not password: error_msg = "password invalid." return api_error(status.HTTP_400_BAD_REQUEST, error_msg) try: seafile_api.set_passwd(repo_id, request.user.username, password) return Response({"success": True}) except SearpcError as e: if e.msg == "Bad arguments": error_msg = "Bad arguments" return api_error(status.HTTP_400_BAD_REQUEST, error_msg) elif e.msg == "Incorrect password": error_msg = _(u"Wrong password") return api_error(status.HTTP_400_BAD_REQUEST, error_msg) elif e.msg == "Internal server error": error_msg = _(u"Internal server error") return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) else: error_msg = _(u"Decrypt library error") return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
def post(self, request, repo_id): repo = seafile_api.get_repo(repo_id) if not repo: error_msg = 'Library %s not found.' % repo_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) password = request.POST.get('password', None) if not password: error_msg = 'password invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) try: seafile_api.set_passwd(repo_id, request.user.username, password) return Response({'success': True}) except SearpcError as e: if e.msg == 'Bad arguments': error_msg = 'Bad arguments' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) elif e.msg == 'Incorrect password': error_msg = _(u'Wrong password') return api_error(status.HTTP_400_BAD_REQUEST, error_msg) elif e.msg == 'Internal server error': error_msg = _(u'Internal server error') return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) else: error_msg = _(u'Decrypt library error') return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
def post(self, request, repo_id): """ Check if repo password is correct. Permission checking: 1. User can access current repo. """ # argument check password = request.data.get('password', None) if not password: error_msg = 'password invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) # resource check repo = seafile_api.get_repo(repo_id) if not repo: error_msg = 'Library %s not found.' % repo_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) if not repo.encrypted: error_msg = 'Library %s is not encrypted.' % repo_id return api_error(status.HTTP_400_BAD_REQUEST, error_msg) # permission check if not check_folder_permission(request, repo_id, '/'): error_msg = 'Permission denied.' return api_error(status.HTTP_403_FORBIDDEN, error_msg) # check the password is correct try: seafile_api.set_passwd(repo_id, request.user.username, password) except SearpcError as e: if e.msg == 'Bad arguments': error_msg = 'Bad arguments' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) elif e.msg == 'Incorrect password': error_msg = _('Wrong password') return api_error(status.HTTP_400_BAD_REQUEST, error_msg) elif e.msg == 'Internal server error': error_msg = _('Internal Server Error') return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) else: error_msg = _('Decrypt library error') return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) if ENABLE_RESET_ENCRYPTED_REPO_PASSWORD: add_encrypted_repo_secret_key_to_database(repo_id, password) return Response({'success': True})
def post(self, request, repo_id): """ Check if repo password is correct. Permission checking: 1. User can access current repo. """ # argument check password = request.data.get('password', None) if not password: error_msg = 'password invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) # resource check repo = seafile_api.get_repo(repo_id) if not repo: error_msg = 'Library %s not found.' % repo_id return api_error(status.HTTP_404_NOT_FOUND, error_msg) if not repo.encrypted: error_msg = 'Library %s is not encrypted.' % repo_id return api_error(status.HTTP_400_BAD_REQUEST, error_msg) # permission check if not check_folder_permission(request, repo_id, '/'): error_msg = 'Permission denied.' return api_error(status.HTTP_403_FORBIDDEN, error_msg) # check the password is correct try: seafile_api.set_passwd(repo_id, request.user.username, password) except SearpcError as e: if e.msg == 'Bad arguments': error_msg = 'Bad arguments' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) elif e.msg == 'Incorrect password': error_msg = _(u'Wrong password') return api_error(status.HTTP_400_BAD_REQUEST, error_msg) elif e.msg == 'Internal server error': error_msg = _(u'Internal server error') return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) else: error_msg = _(u'Decrypt library error') return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) if ENABLE_RESET_ENCRYPTED_REPO_PASSWORD: add_encrypted_repo_secret_key_to_database(repo_id, password) return Response({'success': True})
def test_password(encrypted_repo): old_passwd = '123' new_passwd = '456' assert api.set_passwd(encrypted_repo.id, encrypted_repo.name, old_passwd) == 0 assert api.get_decrypt_key(encrypted_repo.id, encrypted_repo.name) api.change_repo_passwd(encrypted_repo.repo_id, old_passwd, new_passwd, encrypted_repo.name) == 0 assert api.set_passwd(encrypted_repo.id, encrypted_repo.name, new_passwd) == 0 assert api.is_password_set(encrypted_repo.id, encrypted_repo.name) assert api.unset_passwd(encrypted_repo.id, encrypted_repo.name, new_passwd) == 0 assert api.is_password_set(encrypted_repo.id, encrypted_repo.name) == 0
def test_encrypted_repo(rpc, enc_version): test_repo_name = 'test_enc_repo' test_repo_desc = 'test_enc_repo' test_repo_passwd = 'test_enc_repo' if rpc == 'create_repo': repo_id = api.create_repo(test_repo_name, test_repo_desc, USER, test_repo_passwd, enc_version) assert repo_id else: if enc_version == 2: repo_id = 'd17bf8ca-3019-40ee-8fdb-0258c89fb762' elif enc_version == 3: repo_id = 'd17bf8ca-3019-40ee-8fdb-0258c89fb763' else: repo_id = 'd17bf8ca-3019-40ee-8fdb-0258c89fb764' enc_info = api.generate_magic_and_random_key(enc_version, repo_id, test_repo_passwd) assert enc_info ret_repo_id = api.create_enc_repo(repo_id, test_repo_name, test_repo_desc, USER, enc_info.magic, enc_info.random_key, enc_info.salt, enc_version) assert ret_repo_id == repo_id repo = api.get_repo(repo_id) assert repo assert repo.enc_version == enc_version assert len(repo.magic) == 64 assert len(repo.random_key) == 96 if enc_version == 3 or enc_version == 4: assert len(repo.salt) == 64 new_passwd = 'new password' assert api.set_passwd(repo.id, USER, test_repo_passwd) == 0 assert api.get_decrypt_key(repo.id, USER) api.change_repo_passwd(repo.repo_id, test_repo_passwd, new_passwd, USER) == 0 assert api.set_passwd(repo.id, USER, new_passwd) == 0 assert api.is_password_set(repo.id, USER) assert api.unset_passwd(repo.id, USER) == 0 assert api.is_password_set(repo.id, USER) == 0 api.remove_repo(repo_id)