def RepoUpdateEventHandler(session, msg): elements = msg.body.split('\t') if len(elements) != 3: logging.warning("got bad message: %s", elements) return etype = 'repo-update' repo_id = elements[1] commit_id = elements[2] detail = {'repo_id': repo_id, 'commit_id': commit_id, } org_id = get_org_id_by_repo_id(repo_id) if org_id > 0: users = get_related_users_by_org_repo(org_id, repo_id) else: users = get_related_users_by_repo(repo_id) if not users: return time = datetime.datetime.utcfromtimestamp(msg.ctime) if org_id > 0: save_org_user_events (session, org_id, etype, detail, users, time) else: save_user_events (session, etype, detail, users, time)
def repo_remove(request, repo_id): if not request.is_ajax(): raise Http404 content_type = 'application/json; charset=utf-8' result = {} repo = get_repo(repo_id) if not repo: result['error'] = _(u'Library does not exist') return HttpResponse(json.dumps(result), status=400, content_type=content_type) user = request.user.username org, base_template = check_and_get_org_by_repo(repo_id, user) if org: # Remove repo in org context, only repo owner or org staff can # perform this operation. if request.user.is_staff or org.is_staff or \ is_org_repo_owner(org.org_id, repo_id, user): # Must get related useres before remove the repo usernames = get_related_users_by_org_repo(org.org_id, repo_id) seafile_api.remove_repo(repo_id) repo_deleted.send( sender=None, org_id=org.org_id, usernames=usernames, repo_owner=user, repo_id=repo_id, repo_name=repo.name, ) result['success'] = True return HttpResponse(json.dumps(result), content_type=content_type) else: result['error'] = _(u'Permission denied.') return HttpResponse(json.dumps(result), status=400, content_type=content_type) else: # Remove repo in personal context, only repo owner or site staff can # perform this operation. if validate_owner(request, repo_id) or request.user.is_staff: usernames = get_related_users_by_repo(repo_id) seafile_api.remove_repo(repo_id) repo_deleted.send( sender=None, org_id=-1, usernames=usernames, repo_owner=user, repo_id=repo_id, repo_name=repo.name, ) result['success'] = True return HttpResponse(json.dumps(result), content_type=content_type) else: result['error'] = _(u'Permission denied.') return HttpResponse(json.dumps(result), status=400, content_type=content_type)
def delete(self, request, repo_id, format=None): """ delete a library Permission checking: 1. only admin can perform this action. """ if get_system_default_repo_id() == repo_id: error_msg = _('System library can not be deleted.') return api_error(status.HTTP_400_BAD_REQUEST, error_msg) repo = seafile_api.get_repo(repo_id) if not repo: # for case of `seafile-data` has been damaged # no `repo object` will be returned from seafile api # delete the database record anyway try: seafile_api.remove_repo(repo_id) except Exception as e: logger.error(e) error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) return Response({'success': True}) repo_name = repo.name repo_owner = seafile_api.get_repo_owner(repo_id) if not repo_owner: repo_owner = seafile_api.get_org_repo_owner(repo_id) try: related_usernames = seaserv.get_related_users_by_repo(repo_id) seafile_api.remove_repo(repo_id) # send signal for seafevents repo_deleted.send(sender=None, org_id=-1, operator=request.user.username, usernames=related_usernames, repo_owner=repo_owner, repo_id=repo_id, repo_name=repo.name) except Exception as e: logger.error(e) error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) # send admin operation log signal admin_op_detail = { "id": repo_id, "name": repo_name, "owner": repo_owner, } admin_operation.send(sender=None, admin_name=request.user.username, operation=REPO_DELETE, detail=admin_op_detail) return Response({'success': True})
def delete(self, request, repo_id, format=None): """ delete a library Permission checking: 1. only admin can perform this action. """ if get_system_default_repo_id() == repo_id: error_msg = _('System library can not be deleted.') return api_error(status.HTTP_400_BAD_REQUEST, error_msg) repo = seafile_api.get_repo(repo_id) if not repo: return api_error(status.HTTP_404_NOT_FOUND, 'Library %s not found.' % repo_id) repo_owner = seafile_api.get_repo_owner(repo_id) if not repo_owner: repo_owner = seafile_api.get_org_repo_owner(repo_id) related_usernames = seaserv.get_related_users_by_repo(repo_id) try: seafile_api.remove_repo(repo_id) repo_deleted.send(sender=None, org_id=-1, usernames=related_usernames, repo_owner=repo_owner, repo_id=repo_id, repo_name=repo.name) except Exception as e: logger.error(e) error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) return Response({'success': True})
def repo_remove(request, repo_id): if not request.is_ajax(): raise Http404 content_type = 'application/json; charset=utf-8' result = {} if get_system_default_repo_id() == repo_id: result['error'] = _(u'System library can not be deleted.') return HttpResponse(json.dumps(result), status=403, content_type=content_type) repo = get_repo(repo_id) if not repo: result['error'] = _(u'Library does not exist') return HttpResponse(json.dumps(result), status=400, content_type=content_type) user = request.user.username org, base_template = check_and_get_org_by_repo(repo_id, user) if org: # Remove repo in org context, only repo owner or org staff can # perform this operation. if request.user.is_staff or org.is_staff or \ is_org_repo_owner(org.org_id, repo_id, user): # Must get related useres before remove the repo usernames = get_related_users_by_org_repo(org.org_id, repo_id) seafile_api.remove_repo(repo_id) repo_deleted.send(sender=None, org_id=org.org_id, usernames=usernames, repo_owner=user, repo_id=repo_id, repo_name=repo.name, ) result['success'] = True return HttpResponse(json.dumps(result), content_type=content_type) else: result['error'] = _(u'Permission denied.') return HttpResponse(json.dumps(result), status=400, content_type=content_type) else: # Remove repo in personal context, only repo owner or site staff can # perform this operation. if validate_owner(request, repo_id) or request.user.is_staff: usernames = get_related_users_by_repo(repo_id) seafile_api.remove_repo(repo_id) repo_deleted.send(sender=None, org_id=-1, usernames=usernames, repo_owner=user, repo_id=repo_id, repo_name=repo.name, ) result['success'] = True return HttpResponse(json.dumps(result), content_type=content_type) else: result['error'] = _(u'Permission denied.') return HttpResponse(json.dumps(result), status=400, content_type=content_type)