Revision d7030402

b/snf-astakos-app/astakos/im/auth_providers.py
245 245
                self.module, identifier=self.identifier)
246 246

  
247 247
            if pending:
248
                pending._instance.delete()
248
                user = pending._instance.user
249
                logger.info("Removing existing unverified user (%r)",
250
                            user.log_display)
251
                user.delete()
249 252

  
250 253
        create_params = {
251 254
            'module': self.module,
b/snf-astakos-app/astakos/im/tests/auth.py
121 121
        existing_user.delete()
122 122

  
123 123
        # and finally a valid signup
124
        post_data['email'] = 'kpap@synnefo.org'
124
        post_data['email'] = 'kpap-takeover@synnefo.org'
125 125
        r = client.post(signup_url, post_data, follow=True)
126 126
        self.assertContains(r, messages.VERIFICATION_SENT)
127 127

  
128
        # takeover of the uverified the shibboleth identifier
129
        client = ShibbolethClient()
130
        client.set_tokens(mail="kpap@synnefo.org", remote_user="kpapeppn",
131
                          eppn="kpapeppn",
132
                          cn="Kostas Papadimitriou",
133
                          ep_affiliation="Test Affiliation")
134
        r = client.get(ui_url('login/shibboleth?'), follow=True,
135
                       **{'HTTP_SHIB_CUSTOM_IDP_KEY': 'test'})
136
        # a new pending user created, previous one was deleted
137
        self.assertEqual(PendingThirdPartyUser.objects.count(), 1)
138
        pending_user = PendingThirdPartyUser.objects.get(
139
            third_party_identifier="kpapeppn")
140
        identifier = pending_user.third_party_identifier
141
        token = pending_user.token
142
        post_data = {'third_party_identifier': identifier,
143
                     'third_party_token': token}
144
        post_data['email'] = 'kpap@synnefo.org'
145
        r = client.post(signup_url, post_data)
146
        self.assertEqual(PendingThirdPartyUser.objects.count(), 0)
147
        # previously unverified user associated with kpapeppn gets deleted
148
        user_qs = AstakosUser.objects.filter(email="kpap-takeover@synnefo.org")
149
        self.assertEqual(user_qs.count(), 0)
150

  
128 151
        # entires commited as expected
129 152
        self.assertEqual(AstakosUser.objects.count(), 1)
130 153
        self.assertEqual(AstakosUserAuthProvider.objects.count(), 1)
131
        self.assertEqual(PendingThirdPartyUser.objects.count(), 0)
132 154

  
133 155
        user = AstakosUser.objects.get()
134 156
        provider = user.get_auth_provider("shibboleth")
......
143 165
        self.assertEqual(provider.info['name'], u'Kostas Papadimitriou')
144 166
        self.assertTrue('headers' in provider.info)
145 167

  
146
        # login (not activated yet)
168
        # login (not verified yet)
169
        client.set_tokens(mail="kpap@synnefo.org", remote_user="kpapeppn",
170
                          cn="Kostas Papadimitriou")
171
        r = client.get(ui_url("login/shibboleth?"), follow=True)
172
        self.assertContains(r, 'A pending registration exists for')
173
        self.assertNotContains(r, 'pending moderation')
174
        self.assertEqual(PendingThirdPartyUser.objects.count(), 1)
175
        tmp_third_party = PendingThirdPartyUser.objects.get()
176

  
177
        # user gets verified
178
        u = AstakosUser.objects.get(username="kpap@synnefo.org")
179
        backend = activation_backends.get_backend()
180
        activation_result = backend.verify_user(u, u.verification_code)
147 181
        client.set_tokens(mail="kpap@synnefo.org", remote_user="kpapeppn",
148 182
                          cn="Kostas Papadimitriou")
149 183
        r = client.get(ui_url("login/shibboleth?"), follow=True)
150
        self.assertContains(r, 'is pending moderation')
184
        self.assertNotContains(r, 'A pending registration exists for')
185
        self.assertContains(r, 'pending moderation')
186

  
187
        # temporary signup process continues. meanwhile the user have verified
188
        # her account. The signup process should fail
189
        tp = tmp_third_party
190
        post_data = {'third_party_identifier': tp.third_party_identifier,
191
                     'email': 'unsed-email@synnefo.org',
192
                     'third_party_token': tp.token}
193
        r = client.post(signup_url, post_data)
194
        self.assertEqual(r.status_code, 404)
151 195

  
152 196
        # admin activates the user
153 197
        u = AstakosUser.objects.get(username="kpap@synnefo.org")
......
158 202
        backend.send_result_notifications(activation_result, u)
159 203
        self.assertEqual(u.is_active, True)
160 204

  
205

  
161 206
        # we see our profile
162 207
        r = client.get(ui_url("login/shibboleth?"), follow=True)
163 208
        self.assertRedirects(r, ui_url('landing'))
b/snf-astakos-app/astakos/im/views/im.py
435 435
        unverified = get_unverified(pending.provider,
436 436
                                    identifier=pending.third_party_identifier)
437 437

  
438
        get_verified = AstakosUserAuthProvider.objects.verified
439
        verified = get_verified(pending.provider,
440
                                identifier=pending.third_party_identifier)
441
        if verified:
442
            # an existing verified user already exists for the third party
443
            # identifier
444
            pending.delete()
445
            raise Http404
446

  
438 447
        if unverified and request.method == 'GET':
439 448
            messages.warning(request, unverified.get_pending_registration_msg)
440
            if unverified.user.moderated:
441
                messages.warning(request,
442
                                 unverified.get_pending_resend_activation_msg)
443
            else:
444
                messages.warning(request,
445
                                 unverified.get_pending_moderation_msg)
446 449

  
447 450
    # prepare activation backend based on current request
448 451
    if not activation_backend:

Also available in: Unified diff