Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Debian New Member Process
nm.debian.org
Commits
8a86bdf3
Commit
8a86bdf3
authored
May 01, 2020
by
Enrico Zini
Browse files
Sync to changes in contributors.d.o. refs:
#25
parent
619455eb
Pipeline
#131935
passed with stage
in 5 minutes and 9 seconds
Changes
3
Pipelines
1
Show whitespace changes
Inline
Side-by-side
signon/middleware.py
View file @
8a86bdf3
...
...
@@ -96,7 +96,13 @@ class SignonMiddleware:
for
identity
in
request
.
signon_identities
.
values
():
if
user
is
None
:
user
=
User
.
objects
.
create_from_identity
(
identity
)
identity
.
user
=
user
log
.
info
(
"%s: auto created from identity %s"
,
user
,
identity
)
identity
.
person
=
user
log
.
info
(
"%s: auto bound to identity %s"
,
user
,
identity
)
identity
.
save
(
audit_author
=
User
.
objects
.
get_housekeeper
(),
audit_notes
=
f
"Auto associated during automatic creation of user
{
user
}
"
,
)
def
_signon_auto_bind
(
self
,
request
):
"""
...
...
signon/tests/test_authentication.py
View file @
8a86bdf3
...
...
@@ -2,6 +2,7 @@ from __future__ import annotations
from
unittest
import
mock
from
django.test
import
TestCase
,
override_settings
from
django.urls
import
reverse
from
django.contrib.auth
import
get_user_model
from
signon.unittest
import
SignonFixtureMixin
from
signon
import
providers
...
...
@@ -275,3 +276,79 @@ class TestAuthentication(SignonFixtureMixin, TestCase):
self
.
identities
.
salsa2
.
refresh_from_db
()
self
.
assertIsNone
(
self
.
identities
.
salsa2
.
person
)
@
override_settings
(
SIGNON_AUTO_CREATE_USER
=
True
)
def
test_auto_create_user_debsso
(
self
):
User
=
get_user_model
()
if
not
hasattr
(
User
.
objects
,
"create_from_identity"
):
self
.
skipTest
(
"user model manager does not implement create_from_identity"
)
# One bound debsso account
self
.
identities
.
create
(
"debsso"
,
issuer
=
"debsso"
,
subject
=
"new@debian.org"
,
audit_skip
=
True
)
def
_instantiate_identities
(
_self
,
request
):
request
.
signon_identities
=
{
"debsso"
:
self
.
identities
.
debsso
,
}
with
mock
.
patch
(
"signon.middleware.SignonMiddleware._instantiate_identities"
,
_instantiate_identities
):
client
=
self
.
make_test_client
(
None
)
with
self
.
assertLogs
()
as
log
:
response
=
client
.
get
(
reverse
(
'signon:whoami'
))
self
.
identities
.
debsso
.
refresh_from_db
()
person
=
self
.
identities
.
debsso
.
person
self
.
assertEqual
(
log
.
output
,
[
f
"INFO:signon.middleware:
{
person
}
: auto created from identity -:debsso:new@debian.org"
,
f
"INFO:signon.middleware:
{
person
}
: auto bound to identity
{
person
}
:debsso:new@debian.org"
,
])
self
.
assertEqual
(
response
.
status_code
,
200
)
request
=
response
.
wsgi_request
self
.
assertEqual
(
request
.
signon_identities
,
{
"debsso"
:
self
.
identities
.
debsso
,
})
self
.
assertIsNotNone
(
person
)
self
.
assertEqual
(
list
(
person
.
identities
.
all
()),
[
self
.
identities
.
debsso
])
@
override_settings
(
SIGNON_AUTO_CREATE_USER
=
True
)
def
test_auto_create_user_salsa
(
self
):
User
=
get_user_model
()
if
not
hasattr
(
User
.
objects
,
"create_from_identity"
):
self
.
skipTest
(
"user model manager does not implement create_from_identity"
)
# One bound debsso account
self
.
identities
.
create
(
"salsa"
,
issuer
=
"salsa"
,
subject
=
"2"
,
username
=
"new"
,
audit_skip
=
True
)
def
_instantiate_identities
(
_self
,
request
):
request
.
signon_identities
=
{
"salsa"
:
self
.
identities
.
salsa
,
}
with
mock
.
patch
(
"signon.middleware.SignonMiddleware._instantiate_identities"
,
_instantiate_identities
):
client
=
self
.
make_test_client
(
None
)
with
self
.
assertLogs
()
as
log
:
response
=
client
.
get
(
reverse
(
'signon:whoami'
))
self
.
identities
.
salsa
.
refresh_from_db
()
person
=
self
.
identities
.
salsa
.
person
self
.
assertEqual
(
log
.
output
,
[
f
"INFO:signon.middleware:
{
person
}
: auto created from identity -:salsa:2"
,
f
"INFO:signon.middleware:
{
person
}
: auto bound to identity
{
person
}
:salsa:2"
,
])
self
.
assertEqual
(
response
.
status_code
,
200
)
request
=
response
.
wsgi_request
self
.
assertEqual
(
request
.
signon_identities
,
{
"salsa"
:
self
.
identities
.
salsa
,
})
self
.
assertIsNotNone
(
person
)
self
.
assertEqual
(
list
(
person
.
identities
.
all
()),
[
self
.
identities
.
salsa
])
signon/views.py
View file @
8a86bdf3
...
...
@@ -42,7 +42,11 @@ class Logout(View):
# Log out the Django user if they were logged in.
auth
.
logout
(
request
)
next_url
=
request
.
POST
.
get
(
"next"
)
if
next_url
is
None
:
return
redirect
(
"home"
)
else
:
return
redirect
(
next_url
)
class
Whoami
(
View
):
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment