def post(self, request, email, format=None): # migrate an account's repos and groups to an exist account if not is_valid_username(email): return api_error(status.HTTP_404_NOT_FOUND, 'User not found.') op = request.DATA.get('op', '').lower() if op == 'migrate': from_user = email to_user = request.DATA.get('to_user', '') if not is_valid_username(to_user): return api_error(status.HTTP_400_BAD_REQUEST, '%s is not valid email.' % to_user) try: user2 = User.objects.get(email=to_user) except User.DoesNotExist: return api_error(status.HTTP_400_BAD_REQUEST, '%s does not exist.' % to_user) # transfer owned repos to new user for r in seafile_api.get_owned_repo_list(from_user): seafile_api.set_repo_owner(r.id, user2.username) # transfer joined groups to new user for g in seaserv.get_personal_groups_by_user(from_user): if not seaserv.is_group_user(g.id, user2.username): # add new user to the group on behalf of the group creator ccnet_threaded_rpc.group_add_member(g.id, g.creator_name, to_user) if from_user == g.creator_name: ccnet_threaded_rpc.set_group_creator(g.id, to_user) return Response("success") else: return api_error(status.HTTP_400_BAD_REQUEST, 'Op can only be migrate')
def post(self, request, email, format=None): # migrate an account's repos and groups to an exist account if not is_valid_username(email): return api_error(status.HTTP_400_BAD_REQUEST, 'Email %s invalid.' % email) op = request.data.get('op', '').lower() if op == 'migrate': from_user = email to_user = request.data.get('to_user', '') if not is_valid_username(to_user): return api_error(status.HTTP_400_BAD_REQUEST, 'Email %s invalid.' % to_user) try: user2 = User.objects.get(email=to_user) except User.DoesNotExist: return api_error(status.HTTP_404_NOT_FOUND, 'User %s not found.' % to_user) # transfer owned repos to new user for r in seafile_api.get_owned_repo_list(from_user): seafile_api.set_repo_owner(r.id, user2.username) # transfer joined groups to new user for g in seaserv.get_personal_groups_by_user(from_user): if not seaserv.is_group_user(g.id, user2.username): # add new user to the group on behalf of the group creator ccnet_threaded_rpc.group_add_member(g.id, g.creator_name, to_user) if from_user == g.creator_name: ccnet_threaded_rpc.set_group_creator(g.id, to_user) return Response("success") else: return api_error(status.HTTP_400_BAD_REQUEST, 'op can only be migrate.')
def setUp(self): self.login_as(self.admin) # create group for admin user self.admin_group_1_name = randstring(6) self.admin_group_1_id = ccnet_threaded_rpc.create_group(self.admin_group_1_name, self.admin.email) # create another group for admin user self.admin_group_2_name = randstring(6) self.admin_group_2_id = ccnet_threaded_rpc.create_group(self.admin_group_2_name, self.admin.email) # create repo for admin user self.admin_repo_name = randstring(6) r = seafile_api.get_repo(self.create_repo(name=self.admin_repo_name, desc='', username=self.admin.email, passwd=None)) self.admin_repo_id = r.id # set common user as staff in admin user's group ccnet_threaded_rpc.group_add_member(self.admin_group_1_id, self.admin.email, self.user.email) ccnet_threaded_rpc.group_set_admin(self.admin_group_1_id, self.user.email) # add common user to admin user's another group ccnet_threaded_rpc.group_add_member(self.admin_group_2_id, self.admin.email, self.user.email) # share admin user's repo to common user seafile_api.share_repo(self.admin_repo_id, self.admin.email, self.user.email, 'rw')
def group_add_admin(request, group_id): """ Add group admin. """ group_id = int(group_id) # Checked by URL Conf if request.method != 'POST' or not request.is_ajax(): raise Http404 result = {} content_type = 'application/json; charset=utf-8' member_name_str = request.POST.get('user_name', '') member_list = string2list(member_name_str) for member_name in member_list: # Add user to contacts. mail_sended.send(sender=None, user=request.user.username, email=member_name) if not is_registered_user(member_name): err_msg = _(u'Failed to add, %s is not registrated.') % member_name result['error'] = err_msg return HttpResponse(json.dumps(result), status=400, content_type=content_type) # Check whether user is in the group if is_group_user(group_id, member_name): try: ccnet_threaded_rpc.group_set_admin(group_id, member_name) except SearpcError, e: result['error'] = _(e.msg) return HttpResponse(json.dumps(result), status=500, content_type=content_type) else: try: ccnet_threaded_rpc.group_add_member(group_id, request.user.username, member_name) ccnet_threaded_rpc.group_set_admin(group_id, member_name) except SearpcError, e: result['error'] = _(e.msg) return HttpResponse(json.dumps(result), status=500, content_type=content_type)
def post(self, request, email, format=None): # migrate an account's repos and groups to an exist account if not is_valid_username(email): return api_error(status.HTTP_400_BAD_REQUEST, 'Email %s invalid.' % email) op = request.data.get('op', '').lower() if op == 'migrate': from_user = email to_user = request.data.get('to_user', '') if not is_valid_username(to_user): return api_error(status.HTTP_400_BAD_REQUEST, 'Email %s invalid.' % to_user) try: user2 = User.objects.get(email=to_user) except User.DoesNotExist: return api_error(status.HTTP_404_NOT_FOUND, 'User %s not found.' % to_user) # transfer owned repos to new user for r in seafile_api.get_owned_repo_list(from_user): seafile_api.set_repo_owner(r.id, user2.username) # transfer shared repos to new user for r in seafile_api.get_share_in_repo_list(from_user, -1, -1): owner = seafile_api.get_repo_owner(r.repo_id) seafile_api.share_repo(r.repo_id, owner, to_user, r.permission) # transfer joined groups to new user for g in ccnet_api.get_groups(from_user): if not is_group_member(g.id, user2.username): # add new user to the group on behalf of the group creator ccnet_threaded_rpc.group_add_member( g.id, g.creator_name, to_user) if from_user == g.creator_name: ccnet_threaded_rpc.set_group_creator(g.id, to_user) return Response({'success': True}) else: return api_error(status.HTTP_400_BAD_REQUEST, 'op can only be migrate.')
def setUp(self): self.login_as(self.admin) # create group for admin user self.admin_group_1_name = randstring(6) self.admin_group_1_id = ccnet_threaded_rpc.create_group( self.admin_group_1_name, self.admin.email) # create another group for admin user self.admin_group_2_name = randstring(6) self.admin_group_2_id = ccnet_threaded_rpc.create_group( self.admin_group_2_name, self.admin.email) # create repo for admin user self.admin_repo_name = randstring(6) r = seafile_api.get_repo( self.create_repo(name=self.admin_repo_name, desc='', username=self.admin.email, passwd=None)) self.admin_repo_id = r.id # set common user as staff in admin user's group ccnet_threaded_rpc.group_add_member(self.admin_group_1_id, self.admin.email, self.user.email) ccnet_threaded_rpc.group_set_admin(self.admin_group_1_id, self.user.email) # add common user to admin user's another group ccnet_threaded_rpc.group_add_member(self.admin_group_2_id, self.admin.email, self.user.email) # share admin user's repo to common user seafile_api.share_repo(self.admin_repo_id, self.admin.email, self.user.email, 'rw')
def group_manage(request, group_id): group_id = int(group_id) # Checked by URL Conf group = get_group(group_id) if not group: return HttpResponseRedirect(reverse('group_list', args=[])) user = request.user.username if request.method == 'POST': """ Add group members. """ result = {} content_type = 'application/json; charset=utf-8' member_name_str = request.POST.get('user_name', '') member_list = string2list(member_name_str) # Add users to contacts. for email in member_list: mail_sended.send(sender=None, user=user, email=email) mail_sended_list = [] if request.cloud_mode: if request.user.org: # Can only invite org users to group. org_id = request.user.org['org_id'] for email in member_list: if not ccnet_threaded_rpc.org_user_exists(org_id, email): err_msg = _(u'Failed to add, %s is not in current organization.') % email result['error'] = err_msg return HttpResponse(json.dumps(result), status=400, content_type=content_type) else: try: ccnet_threaded_rpc.group_add_member(group_id, user, email) except SearpcError, e: result['error'] = _(e.msg) return HttpResponse(json.dumps(result), status=500, content_type=content_type) else: # Can invite unregistered user to group. for email in member_list: if not is_registered_user(email): use_https = request.is_secure() domain = RequestSite(request).domain t = loader.get_template('group/add_member_email.html') c = { 'email': user, 'to_email': email, 'group': group, 'domain': domain, 'protocol': use_https and 'https' or 'http', 'site_name': SITE_NAME, } try: send_mail(_(u'Your friend added you to a group at Seafile.'), t.render(Context(c)), None, [email], fail_silently=False) mail_sended_list.append(email) except: data = json.dumps({'error': _(u'Failed to send mail.')}) return HttpResponse(data, status=500, content_type=content_type) # Add user to group, unregistered user will see the group # when he logs in. try: ccnet_threaded_rpc.group_add_member(group_id, user, email) except SearpcError, e: result['error'] = _(e.msg) return HttpResponse(json.dumps(result), status=500, content_type=content_type)
user, email) except SearpcError, e: result['error'] = _(e.msg) return HttpResponse(json.dumps(result), status=500, content_type=content_type) else: # Can only invite registered user to group if not in cloud mode. for email in member_list: if not is_registered_user(email): err_msg = _(u'Failed to add, %s is not registerd.') result['error'] = err_msg % email return HttpResponse(json.dumps(result), status=400, content_type=content_type) # Add user to group. try: ccnet_threaded_rpc.group_add_member(group_id, user, email) except SearpcError, e: result['error'] = _(e.msg) return HttpResponse(json.dumps(result), status=500, content_type=content_type) if mail_sended_list: msg = ungettext( 'Successfully added. An email has been sent.', 'Successfully added. %(count)s emails have been sent.', len(mail_sended_list)) % { 'count': len(mail_sended_list), } messages.success(request, msg) else: messages.success(request, _(u'Successfully added.'))
def group_manage(request, group_id): group_id = int(group_id) # Checked by URL Conf group = get_group(group_id) if not group: return HttpResponseRedirect(reverse("group_list", args=[])) user = request.user.username if request.method == "POST": """ Add group members. """ result = {} content_type = "application/json; charset=utf-8" member_name_str = request.POST.get("user_name", "") member_list = string2list(member_name_str) # Add users to contacts. for email in member_list: mail_sended.send(sender=None, user=user, email=email) mail_sended_list = [] if request.cloud_mode: if request.user.org: # Can only invite org users to group. org_id = request.user.org["org_id"] for email in member_list: if not ccnet_threaded_rpc.org_user_exists(org_id, email): err_msg = _(u"Failed to add, %s is not in current organization.") % email result["error"] = err_msg return HttpResponse(json.dumps(result), status=400, content_type=content_type) else: try: ccnet_threaded_rpc.group_add_member(group_id, user, email) except SearpcError, e: result["error"] = _(e.msg) return HttpResponse(json.dumps(result), status=500, content_type=content_type) else: # Can invite unregistered user to group. for email in member_list: if not is_registered_user(email): use_https = request.is_secure() domain = RequestSite(request).domain t = loader.get_template("group/add_member_email.html") c = { "email": user, "to_email": email, "group": group, "domain": domain, "protocol": use_https and "https" or "http", "site_name": SITE_NAME, } try: send_mail( _(u"Your friend added you to a group in SeaCloud."), t.render(Context(c)), None, [email], fail_silently=False, ) mail_sended_list.append(email) except: data = json.dumps({"error": _(u"Failed to send mail.")}) return HttpResponse(data, status=500, content_type=content_type) # Add user to group, unregistered user will see the group # when he logs in. try: ccnet_threaded_rpc.group_add_member(group_id, user, email) except SearpcError, e: result["error"] = _(e.msg) return HttpResponse(json.dumps(result), status=500, content_type=content_type)