示例#1
0
def user_add(request):
    """Add a user"""

    if not request.user.is_staff and not request.user.org['is_staff']:
        raise Http404

    base_template = 'org_admin_base.html' if request.user.org else 'admin_base.html'

    content_type = 'application/json; charset=utf-8'
    if request.method == 'POST':
        post_values = request.POST.copy()
        post_email = request.POST.get('email', '')
        post_values.update({'email': post_email.lower()})

        form = AddUserForm(post_values)
        if form.is_valid():
            email = form.cleaned_data['email']
            password = form.cleaned_data['password1']

            user = User.objects.create_user(email,
                                            password,
                                            is_staff=False,
                                            is_active=True)
            if request.user.org:
                org_id = request.user.org['org_id']
                url_prefix = request.user.org['url_prefix']
                ccnet_threaded_rpc.add_org_user(org_id, email, 0)
                if hasattr(settings, 'EMAIL_HOST'):
                    send_user_add_mail(request, email, password)

                return HttpResponseRedirect(
                    reverse('org_useradmin', args=[url_prefix]))
            else:
                if IS_EMAIL_CONFIGURED:
                    if SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER:
                        try:
                            send_user_add_mail(request, email, password)
                            messages.success(
                                request,
                                _(u'Successfully added user %s. An email notification has been sent.'
                                  ) % email)
                        except Exception, e:
                            logger.error(str(e))
                            messages.success(
                                request,
                                _(u'Successfully added user %s. An error accurs when sending email notification, please check your email configuration.'
                                  ) % email)
                    else:
                        messages.success(
                            request,
                            _(u'Successfully added user %s.') % email)
                else:
                    messages.success(
                        request,
                        _(u'Successfully added user %s. But email notification can not be sent, because Email service is not properly configured.'
                          ) % email)

                return HttpResponse(json.dumps({'success': True}),
                                    content_type=content_type)
示例#2
0
def user_add(request):
    """Add a user"""

    if not request.user.is_staff or request.method != 'POST':
        raise Http404

    content_type = 'application/json; charset=utf-8'

    post_values = request.POST.copy()
    post_email = request.POST.get('email', '')
    post_role = request.POST.get('role', DEFAULT_USER)
    post_values.update({
                        'email': post_email.lower(),
                        'role': post_role,
                      })

    form = AddUserForm(post_values)
    if form.is_valid():
        email = form.cleaned_data['email']
        role = form.cleaned_data['role']
        password = form.cleaned_data['password1']

        user = User.objects.create_user(email, password, is_staff=False,
                                        is_active=True)
        if user:
            User.objects.update_role(email, role)

        if request.user.org:
            org_id = request.user.org.org_id
            url_prefix = request.user.org.url_prefix
            ccnet_threaded_rpc.add_org_user(org_id, email, 0)
            if IS_EMAIL_CONFIGURED:
                try:
                    send_user_add_mail(request, email, password)
                    messages.success(request, _(u'Successfully added user %s. An email notification has been sent.') % email)
                except Exception, e:
                    logger.error(str(e))
                    messages.success(request, _(u'Successfully added user %s. An error accurs when sending email notification, please check your email configuration.') % email)
            else:
                messages.success(request, _(u'Successfully added user %s.') % email)

            return HttpResponse(json.dumps({'success': True}), content_type=content_type)
        else:
            if IS_EMAIL_CONFIGURED:
                if SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER:
                    try:
                        send_user_add_mail(request, email, password)
                        messages.success(request, _(u'Successfully added user %s. An email notification has been sent.') % email)
                    except Exception, e:
                        logger.error(str(e))
                        messages.success(request, _(u'Successfully added user %s. An error accurs when sending email notification, please check your email configuration.') % email)
                else:
                    messages.success(request, _(u'Successfully added user %s.') % email)
            else:
示例#3
0
    def test_add_user_form_is_valid(self, mock_user_number_over_limit):

        mock_user_number_over_limit.return_value = False

        user_info = {
            'email': '%s@%s.com' % (randstring(10), randstring(10)),
            'role': DEFAULT_USER,
            'password1': 'password',
            'password2': 'password',
        }

        f = AddUserForm(data=user_info)

        self.assertTrue(f.is_valid())
示例#4
0
    def test_add_user_form_is_valid(self, mock_user_number_over_limit):

        mock_user_number_over_limit.return_value = False

        user_info = {
            'email':'%s@%s.com' % (randstring(10), randstring(10)) ,
            'role': DEFAULT_USER,
            'password1':'password',
            'password2':'password',
        }

        f = AddUserForm(data = user_info)

        self.assertTrue(f.is_valid())
示例#5
0
def user_add(request):
    """Add a user"""

    if not request.user.is_staff and not request.user.org['is_staff']:
        raise Http404

    base_template = 'org_admin_base.html' if request.user.org else 'admin_base.html'
    
    content_type = 'application/json; charset=utf-8'
    if request.method == 'POST':
        post_values = request.POST.copy()
        post_email = request.POST.get('email', '')
        post_values.update({'email': post_email.lower()})

        form = AddUserForm(post_values)
        if form.is_valid():
            email = form.cleaned_data['email']
            password = form.cleaned_data['password1']

            user = User.objects.create_user(email, password, is_staff=False,
                                            is_active=True)
            if request.user.org:
                org_id = request.user.org['org_id']
                url_prefix = request.user.org['url_prefix']
                ccnet_threaded_rpc.add_org_user(org_id, email, 0)
                if hasattr(settings, 'EMAIL_HOST'):
                    send_user_add_mail(request, email, password)
                    
                return HttpResponseRedirect(reverse('org_useradmin',
                                                    args=[url_prefix]))
            else:
                if IS_EMAIL_CONFIGURED:
                    if SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER:
                        try:
                            send_user_add_mail(request, email, password)
                            messages.success(request, _(u'Successfully added user %s. An email notification has been sent.') % email)
                        except Exception, e:
                            logger.error(str(e))
                            messages.success(request, _(u'Successfully added user %s. An error accurs when sending email notification, please check your email configuration.') % email)
                    else:
                        messages.success(request, _(u'Successfully added user %s.') % email)
                else:
                    messages.success(request, _(u'Successfully added user %s. But email notification can not be sent, because Email service is not properly configured.') % email)

                return HttpResponse(json.dumps({'success': True}), content_type=content_type)
示例#6
0
    def test_add_user_form_email_invalid_for_exceed_limit(self, mock_user_number_over_limit):

        mock_user_number_over_limit.return_value = True

        user_info = {
            'email': '%s@%s.com' % (randstring(10), randstring(10)),
            'role': DEFAULT_USER,
            'password1': 'password',
            'password2': 'password',
        }

        f = AddUserForm(data = user_info)

        assert 'The number of users exceeds the limit.' in str(f['email'].errors)
示例#7
0
    def test_add_user_form_email_invalid_for_user_exist(self, mock_user_number_over_limit):

        mock_user_number_over_limit.return_value = False

        user_info = {
            # invalid email
            'email': USERNAME,
            'role': DEFAULT_USER,
            'password1': 'password',
            'password2': 'password',
        }

        f = AddUserForm(data = user_info)

        assert 'A user with this email already exists.' in str(f['email'].errors)
示例#8
0
    def test_add_user_form_password_invalid(self, mock_user_number_over_limit):

        mock_user_number_over_limit.return_value = False

        user_info = {
            'email': '%s@%s.com' % (randstring(10), randstring(10)),
            'role': DEFAULT_USER,
            # invalid password
            'password1': 'password1',
            'password2': 'password2',
        }

        f = AddUserForm(data=user_info)

        # to escape `'`
        assert escape("The two passwords didn't match.") in str(f.errors)
示例#9
0
def user_add(request):
    """Add a user"""

    if not request.user.is_staff or request.method != 'POST':
        raise Http404

    content_type = 'application/json; charset=utf-8'

    post_values = request.POST.copy()
    post_email = request.POST.get('email', '')
    post_role = request.POST.get('role', DEFAULT_USER)
    post_values.update({
        'email': post_email.lower(),
        'role': post_role,
    })

    form = AddUserForm(post_values)
    if form.is_valid():
        email = form.cleaned_data['email']
        role = form.cleaned_data['role']
        password = form.cleaned_data['password1']

        user = User.objects.create_user(email,
                                        password,
                                        is_staff=False,
                                        is_active=True)
        if user:
            User.objects.update_role(email, role)

        if request.user.org:
            org_id = request.user.org.org_id
            url_prefix = request.user.org.url_prefix
            ccnet_threaded_rpc.add_org_user(org_id, email, 0)
            if IS_EMAIL_CONFIGURED:
                try:
                    send_user_add_mail(request, email, password)
                    messages.success(
                        request,
                        _(u'Successfully added user %s. An email notification has been sent.'
                          ) % email)
                except Exception, e:
                    logger.error(str(e))
                    messages.success(
                        request,
                        _(u'Successfully added user %s. An error accurs when sending email notification, please check your email configuration.'
                          ) % email)
            else:
                messages.success(request,
                                 _(u'Successfully added user %s.') % email)

            return HttpResponse(json.dumps({'success': True}),
                                content_type=content_type)
        else:
            if IS_EMAIL_CONFIGURED:
                if SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER:
                    try:
                        send_user_add_mail(request, email, password)
                        messages.success(
                            request,
                            _(u'Successfully added user %s. An email notification has been sent.'
                              ) % email)
                    except Exception, e:
                        logger.error(str(e))
                        messages.success(
                            request,
                            _(u'Successfully added user %s. An error accurs when sending email notification, please check your email configuration.'
                              ) % email)
                else:
                    messages.success(request,
                                     _(u'Successfully added user %s.') % email)
            else:
示例#10
0
def user_add(request):
    """Add a user"""

    if not request.user.is_staff or request.method != 'POST':
        raise Http404

    content_type = 'application/json; charset=utf-8'

    post_values = request.POST.copy()
    post_email = request.POST.get('email', '')
    post_role = request.POST.get('role', DEFAULT_USER)
    post_values.update({
        'email': post_email.lower(),
        'role': post_role,
    })

    form = AddUserForm(post_values)
    if form.is_valid():
        email = form.cleaned_data['email']
        name = form.cleaned_data['name']
        department = form.cleaned_data['department']
        role = form.cleaned_data['role']
        password = form.cleaned_data['password1']

        try:
            user = User.objects.create_user(email,
                                            password,
                                            is_staff=False,
                                            is_active=True)
        except User.DoesNotExist as e:
            logger.error(e)
            err_msg = _('Fail to add user %s.') % email
            return HttpResponse(json.dumps({'error': err_msg}),
                                status=403,
                                content_type=content_type)

        # send admin operation log signal
        admin_op_detail = {
            "email": email,
        }
        admin_operation.send(sender=None,
                             admin_name=request.user.username,
                             operation=USER_ADD,
                             detail=admin_op_detail)

        if user:
            User.objects.update_role(email, role)
            if config.FORCE_PASSWORD_CHANGE:
                UserOptions.objects.set_force_passwd_change(email)
            if name:
                Profile.objects.add_or_update(email, name, '')
            if department:
                DetailedProfile.objects.add_or_update(email, department, '')

        if request.user.org:
            org_id = request.user.org.org_id
            ccnet_threaded_rpc.add_org_user(org_id, email, 0)
            if IS_EMAIL_CONFIGURED:
                try:
                    send_user_add_mail(request, email, password)
                    messages.success(
                        request,
                        _('Successfully added user %s. An email notification has been sent.'
                          ) % email)
                except Exception as e:
                    logger.error(str(e))
                    messages.success(
                        request,
                        _('Successfully added user %s. An error accurs when sending email notification, please check your email configuration.'
                          ) % email)
            else:
                messages.success(request,
                                 _('Successfully added user %s.') % email)

            return HttpResponse(json.dumps({'success': True}),
                                content_type=content_type)
        else:
            if IS_EMAIL_CONFIGURED:
                if SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER:
                    try:
                        send_user_add_mail(request, email, password)
                        messages.success(
                            request,
                            _('Successfully added user %s. An email notification has been sent.'
                              ) % email)
                    except Exception as e:
                        logger.error(str(e))
                        messages.success(
                            request,
                            _('Successfully added user %s. An error accurs when sending email notification, please check your email configuration.'
                              ) % email)
                else:
                    messages.success(request,
                                     _('Successfully added user %s.') % email)
            else:
                messages.success(
                    request,
                    _('Successfully added user %s. But email notification can not be sent, because Email service is not properly configured.'
                      ) % email)

            return HttpResponse(json.dumps({'success': True}),
                                content_type=content_type)
    else:
        return HttpResponse(json.dumps(
            {'error': str(list(form.errors.values())[0])}),
                            status=400,
                            content_type=content_type)
示例#11
0
def org_user_add(request):
    """Added an organization user, check member quota before adding.
    """
    if request.method != 'POST':
        raise Http404

    content_type = 'application/json; charset=utf-8'

    # check plan
    result = {}
    url_prefix = request.user.org.url_prefix
    org_members = len(ccnet_api.get_org_users_by_url_prefix(
        url_prefix, -1, -1))

    if ORG_MEMBER_QUOTA_ENABLED:
        from seahub_extra.organizations.models import OrgMemberQuota
        org_members_quota = OrgMemberQuota.objects.get_quota(
            request.user.org.org_id)
        if org_members_quota is not None and org_members >= org_members_quota:
            result[
                'error'] = 'Failed. You can only invite %d members.' % org_members_quota
            return HttpResponse(json.dumps(result),
                                status=403,
                                content_type=content_type)

    post_values = request.POST.copy()
    post_email = request.POST.get('email', '')
    post_role = request.POST.get('role', DEFAULT_USER)
    post_values.update({'email': post_email.lower(), 'role': post_role})

    form = AddUserForm(post_values)
    if form.is_valid():
        email = form.cleaned_data['email']
        name = form.cleaned_data['name']
        password = form.cleaned_data['password1']

        try:
            user = User.objects.create_user(email,
                                            password,
                                            is_staff=False,
                                            is_active=True)
        except User.DoesNotExist as e:
            logger.error(e)
            err_msg = _(u'Fail to add user %s.') % email
            return HttpResponse(json.dumps({'error': err_msg}),
                                status=403,
                                content_type=content_type)

        if user and name:
            Profile.objects.add_or_update(username=user.username,
                                          nickname=name)

        org_id = request.user.org.org_id
        set_org_user(org_id, user.username)

        # refresh user object
        user = User.objects.get(user.username)
        if IS_EMAIL_CONFIGURED:
            if SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER:
                try:
                    send_user_add_mail(request, email, password)
                    messages.success(
                        request,
                        _(u'Successfully added user %s. An email notification has been sent.'
                          ) % user.contact_email)
                except Exception, e:
                    logger.error(str(e))
                    messages.success(
                        request,
                        _(u'Successfully added user %s. An error accurs when sending email notification, please check your email configuration.'
                          ) % user.contact_email)
            else:
                messages.success(
                    request,
                    _(u'Successfully added user %s.') % user.contact_email)
        else:
            messages.success(
                request,
                _(u'Successfully added user %s. But email notification can not be sent, because Email service is not properly configured.'
                  ) % user.contact_email)

        return HttpResponse(json.dumps({'success': True}),
                            content_type=content_type)