Skip to content

Commit

Permalink
Updated pyramid version (#44)
Browse files Browse the repository at this point in the history
* Remove link with pyramid beaker, create local session in unittest
* Allow allow all version of pyramid
  • Loading branch information
jssuzanne committed Aug 2, 2023
1 parent 889f395 commit 9c893df
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 34 deletions.
2 changes: 1 addition & 1 deletion anyblok_pyramid/bloks/pyramid/oidc.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ def login(request):
"""
# Makes sure request.session is there what ever the implemented session
# This should implements a Pyramid Idict interface
if not getattr(request, "session", None):
if getattr(request, "session", None) is None:
raise RuntimeError( # pragma: no cover
"In order to use OIDC Relaying party utility, "
"you must configure a Pyramid session "
Expand Down
10 changes: 10 additions & 0 deletions anyblok_pyramid/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,20 @@
# obtain one at http://mozilla.org/MPL/2.0/.
import pytest
from anyblok.conftest import * # noqa
from pyramid.session import SignedCookieSessionFactory

from .testing import init_web_server


@pytest.fixture(scope="class")
def webserver(request, configuration_loaded):
return init_web_server()


@pytest.fixture()
def webserver_with_session(request, configuration_loaded):
def includeme(config):
my_session_factory = SignedCookieSessionFactory("itsaseekreet")
config.set_session_factory(my_session_factory)

return init_web_server(includeme)
75 changes: 44 additions & 31 deletions anyblok_pyramid/tests/test_blok.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

import pytest
from anyblok.config import Configuration
from anyblok.testing import tmp_configuration

try:
from anyblok_pyramid.bloks.pyramid import oidc
Expand Down Expand Up @@ -184,15 +185,7 @@ def test_no_rp_callback(self, registry_testblok, webserver):
)

def oidc_common(self, registry, webserver):
Configuration.set("oidc_provider_issuer", "http://fake")
Configuration.set("oidc_relying_party_client_id", "test_client_id")
Configuration.set("oidc_relying_party_secret_id", "test_secret_id")
Configuration.set(
"oidc_relying_party_callback", "http://localhost/oidc_callback"
)
SCOPE = "test1,test2"
Configuration.set("oidc_scope", SCOPE)
Configuration.set("oidc_userinfo_field", "custom_userinfo_field")
registry.upgrade(install=("test-pyramid2",))
resp = webserver.get("/bloks", status=403)
webserver.get("/blok/auth", status=403)
Expand All @@ -211,34 +204,54 @@ def oidc_common(self, registry, webserver):

@pytest.mark.skipif(not has_oidc, reason="oic is not installed")
@mock.patch("requests.request", side_effect=mock_request)
def test_oidc_auth(self, mock_oidc, registry_testblok, webserver):
qs = self.oidc_common(registry_testblok, webserver)
# user is redirect to OIDC provider in order to do the authentication
# he comes back to the oidc_callback uri with a code and the current
# state
curerent_cookie = webserver.cookies["None"]
webserver.get(
"/oidc_callback?code=a-fake-code&state={}".format(qs["state"][0]),
status=302,
)
assert webserver.cookies["None"] != curerent_cookie
webserver.get("/bloks", status=200)
def test_oidc_auth(
self, mock_oidc, registry_testblok, webserver_with_session
):
webserver = webserver_with_session
SCOPE = "test1,test2"
with tmp_configuration(
oidc_provider_issuer="http://fake",
oidc_relying_party_client_id="test_client_id",
oidc_relying_party_secret_id="test_secret_id",
oidc_relying_party_callback="http://localhost/oidc_callback",
oidc_scope=SCOPE,
oidc_userinfo_field="custom_userinfo_field",
):
qs = self.oidc_common(registry_testblok, webserver)
# user is redirect to OIDC provider in order to do the
# authentication he comes back to the oidc_callback uri
# with a code and the current state
webserver.get(
"/oidc_callback?code=a-fake-code&state={}".format(
qs["state"][0]
),
status=302,
)
webserver.get("/bloks", status=200)

@pytest.mark.skipif(not has_oidc, reason="oic is not installed")
@mock.patch("requests.request", side_effect=mock_request)
def test_unkown_user_oidc_auth(
self, mock_oidc, registry_testblok, webserver
self, mock_oidc, registry_testblok, webserver_with_session
):
qs = self.oidc_common(registry_testblok, webserver)
curerent_cookie = webserver.cookies["None"]
webserver.get(
"/oidc_callback?code=another-fake-code&state={}".format(
qs["state"][0]
),
status=401,
)
assert webserver.cookies["None"] == curerent_cookie
webserver.get("/bloks", status=403)
webserver = webserver_with_session
SCOPE = "test1,test2"
with tmp_configuration(
oidc_provider_issuer="http://fake",
oidc_relying_party_client_id="test_client_id",
oidc_relying_party_secret_id="test_secret_id",
oidc_relying_party_callback="http://localhost/oidc_callback",
oidc_scope=SCOPE,
oidc_userinfo_field="custom_userinfo_field",
):
qs = self.oidc_common(registry_testblok, webserver)
webserver.get(
"/oidc_callback?code=another-fake-code&state={}".format(
qs["state"][0]
),
status=401,
)
webserver.get("/bloks", status=403)


class TestPyramidBlokRestrictQueryByUserId(TestPyramidBlokBase):
Expand Down
1 change: 0 additions & 1 deletion requirements.test.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
anyblok
anyblok-pyramid-beaker
coveralls
flake8
psycopg2
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

requires = [
"anyblok>=1.1.0",
"pyramid<2.0.0",
"pyramid",
"pyramid_tm",
"zope.sqlalchemy",
"passlib",
Expand Down

0 comments on commit 9c893df

Please sign in to comment.