Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
14ba91b
add orthros idp
ivis-kondo Feb 20, 2025
eb1c64f
Shibboleth管理画面の追加機能をpush(html、css以外)
ayumi-nishida Feb 25, 2025
0d7be09
リポジトリ管理者もShibboleth管理画面を開けるように設定
ayumi-nishida Feb 25, 2025
f4b780c
行数の誤りを修正
ayumi-nishida Feb 25, 2025
a1b625c
add auto user provisioning
ivis-kondo Feb 25, 2025
a36aecf
jsをjQueryに書き換え、処理を整理
ayumi-nishida Feb 26, 2025
cf14a94
Shibboleth管理画面のHTML,CSSを反映/その他をOthers→Extraに変更
ayumi-nishida Feb 26, 2025
e34d99f
不要な記述を削除
ayumi-nishida Feb 26, 2025
d0444ec
ダブルクォーテ、シングルクォーテの混在を整理
ayumi-nishida Feb 26, 2025
fc1649f
設定言語の判定方法を修正
ayumi-nishida Feb 26, 2025
f22c23b
修正漏れをプッシュ
ayumi-nishida Feb 26, 2025
152ee08
HTMLへ渡す引数を修正
ayumi-nishida Feb 26, 2025
513770c
ブロックユーザーを追加・削除する機能実装/ユーザーのePPNがブロック一覧に含まれていたらブロックするよう実装
ayumi-nishida Feb 26, 2025
0467212
add auto user provisioning test case
ivis-kondo Feb 26, 2025
82f9430
登録済みユーザーをログインブロック追加時の処理追加
ayumi-nishida Feb 27, 2025
d844673
ログイン時のePPN判定を修正
ayumi-nishida Feb 27, 2025
c1ec10c
管理画面のデフォルトロール追加機能を追加/設定ファイルの値が安定しない不具合残る
ayumi-nishida Feb 28, 2025
c0df874
属性マッピング変更機能を追加/設定ファイルの値が安定しない不具合残る
ayumi-nishida Feb 28, 2025
89f834f
デフォルトロールをデータベース化
ayumi-nishida Mar 4, 2025
cff5ec9
属性マッピングをDB化
ayumi-nishida Mar 5, 2025
a1c9ebf
DBを作成更新処理を修正、ドッカー起動時にDBと設定ファイルを整合させるよう修正
ayumi-nishida Mar 5, 2025
d0247ad
Shibboleth管理画面生成の流れを整理
ayumi-nishida Mar 5, 2025
21d9fef
Shibboleth管理画面の生成の流れを整理
ayumi-nishida Mar 5, 2025
b592052
.shでのDB生成処理を修正
ayumi-nishida Mar 5, 2025
469278b
invenioコマンドを実装
ayumi-nishida Mar 5, 2025
b3781ef
AdminSettings.getをDict型で返すように処理修正/テーブルにデータがない場合に初期値を設定するように修正
ayumi-nishida Mar 5, 2025
cf3d290
AdminSettings.getをdict型で返すように修正
ayumi-nishida Mar 5, 2025
7bacfaa
誤字修正
ayumi-nishida Mar 5, 2025
6f53a11
invenioコマンドによる操作を実装/pytestがまだ
ayumi-nishida Mar 7, 2025
1a23617
不要な処理を削除
ayumi-nishida Mar 7, 2025
cb193fe
属性マッピングinvenioコマンド用のpytest実装
ayumi-nishida Mar 11, 2025
8693e69
言語修正
ayumi-nishida Mar 12, 2025
3933d31
テストコード実装。合わせて不具合解消
ayumi-nishida Mar 13, 2025
b11e412
Redis情報を削除する処理追加、それに合わせてテストコードも修正
ayumi-nishida Mar 14, 2025
15b812a
属性の変数名を修正
ayumi-nishida Mar 24, 2025
a245e03
test_index,test_index_aclが通るように修正
ayumi-nishida Mar 27, 2025
17ff57f
Shib_Admin画面でのtestが通るように修正
ayumi-nishida Mar 27, 2025
921f5eb
テストケースに対応
ayumi-nishida Mar 28, 2025
fd692d7
DB生成の流れを修正
ayumi-nishida Mar 28, 2025
2188e4c
DB生成周りを修正
ayumi-nishida Mar 28, 2025
686b1db
DB生成周りを修正
ayumi-nishida Mar 28, 2025
caac1ad
DB生成周りを修正
ayumi-nishida Mar 28, 2025
eecacbe
DB生成周りを修正/テスト環境時、admin_settingsテーブルの最新化をしないように修正
ayumi-nishida Mar 28, 2025
6ad9e81
Merge pull request #480 from ayumi-nishida/feature/01b-add-shibboleth…
ryoya-hayase Mar 28, 2025
7e1e64c
Merge pull request #484 from ayumi-nishida/feature/01b-user-login-block
ryoya-hayase Mar 28, 2025
abc5a5a
Merge pull request #521 from ayumi-nishida/fix/user-provisioning-test
ryoya-hayase Mar 28, 2025
942ef6e
Merge pull request #530 from ivis-kondo/feature/orthros-login
ryoya-hayase Mar 28, 2025
3e71b75
コンフリクト解消
ayumi-nishida Mar 28, 2025
5b2adf5
コンフリクト解消
ayumi-nishida Mar 28, 2025
9c79028
コンフリクト解消
ayumi-nishida Mar 28, 2025
c184951
Merge branch 'feature/w-oa-01b' into feature/user-provisioning
ivis-kondo Apr 3, 2025
df88ac6
Merge pull request #482 from ivis-weko3-dev/feature/user-provisioning
ivis-kondo Apr 3, 2025
e4432be
Merge pull request #492 from ayumi-nishida/feature/01b-default-role-s…
ivis-kondo Apr 3, 2025
edaf3e4
コンフリクト解消
ayumi-nishida Apr 3, 2025
20e87a5
Merge pull request #512 from ayumi-nishida/feature/01b-attribute_mapp…
ivis-kondo Apr 3, 2025
9786a9b
コンフリクト解消
ayumi-nishida Apr 3, 2025
d971043
コンフリクト解消
ayumi-nishida Apr 3, 2025
caa21b1
Merge pull request #567 from ayumi-nishida/fix/01b-wekoaccounts-test-…
ivis-kondo Apr 3, 2025
1005592
Merge branch 'develop_w2024_58b' into feature/w-oa-01b
ivis-kondo Apr 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions modules/weko-accounts/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@
'weko_accounts_embedded_ds_multi_lang_js = '
'weko_accounts.bundles:embedded_ds_multi_language_js',
'weko_accounts_suggest_js = weko_accounts.bundles:suggest_js',
'weko_accounts_shibuser_css = weko_accounts.bundles:shibuser_css',
],
},
extras_require=extras_require,
Expand Down
4 changes: 3 additions & 1 deletion modules/weko-accounts/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
from weko_index_tree.models import Index
from weko_records_ui import WekoRecordsUI
from weko_redis.redis import RedisConnection
from weko_search_ui import WekoSearchUI
from weko_user_profiles import WekoUserProfiles

from weko_accounts import WekoAccounts, WekoAccountsREST
Expand Down Expand Up @@ -102,6 +103,7 @@ def base_app(instance_path):
WekoUserProfiles(app_)
app_.register_blueprint(blueprint)
WekoAccountsREST(app_)
WekoSearchUI(app_)
return app_


Expand Down Expand Up @@ -189,7 +191,7 @@ def users(app, db):
ds.add_role_to_user(generaluser, general_role)
ds.add_role_to_user(originalroleuser, originalrole)
ds.add_role_to_user(originalroleuser2, originalrole)
ds.add_role_to_user(originalroleuser2, repoadmin_role)
# ds.add_role_to_user(originalroleuser2, repoadmin_role)
ds.add_role_to_user(student,studentrole)

# Assign access authorization
Expand Down
237 changes: 195 additions & 42 deletions modules/weko-accounts/tests/test_admin.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import pytest
import json
from mock import patch
from flask import current_app,url_for,make_response
from invenio_accounts.testutils import login_user_via_session as login
from weko_admin.models import AdminSettings
from invenio_accounts.models import User
from sqlalchemy.orm.session import object_session


class TestShibSettingView:

Expand All @@ -11,14 +16,14 @@ def test_index_acl_guest(self,client,session_time):
assert res.status_code == 302
@pytest.mark.parametrize('user_index, is_can',[
(0,True),
(1,False),
(1,True),
(2,False),
(3,False),
(4,False),
(5,False),
(6,False),
])
def test_index_acl(self,client,users,user_index,is_can,mocker):
def test_index_acl(self,client,users,user_index,is_can,mocker, admin_settings):
mocker.patch("weko_accounts.admin.ShibSettingView.render",return_value=make_response())
login(client=client,email=users[user_index]["email"])
url = url_for("shibboleth.index",_external=True)
Expand All @@ -28,43 +33,191 @@ def test_index_acl(self,client,users,user_index,is_can,mocker):
else:
assert res.status_code == 403
# .tox/c1/bin/pytest --cov=weko_accounts tests/test_admin.py::TestShibSettingView::test_index -vv -s --cov-branch --cov-report=term --basetemp=/code/modules/weko-workflow/.tox/c1/tmp
def test_index(self,client,users,mocker):
login(client=client,email=users[0]["email"])
url = url_for("shibboleth.index")
sibuser_html = 'weko_accounts/setting/shibuser.html'
mock_render = mocker.patch("weko_accounts.admin.ShibSettingView.render",return_value=make_response())
current_app.config.update(
WEKO_ACCOUNTS_SHIB_LOGIN_ENABLED=True
)
# shib_flg = 1
res = client.post(url,data=dict(
submit="shib_form",
shibbolethRadios="1"
))
assert current_app.config["WEKO_ACCOUNTS_SHIB_LOGIN_ENABLED"] == True
assert res.status_code==200
mock_render.assert_called_with(sibuser_html,shib_flg="1")

mock_render = mocker.patch("weko_accounts.admin.ShibSettingView.render",return_value=make_response())
current_app.config.update(
WEKO_ACCOUNTS_SHIB_LOGIN_ENABLED=False
)
# shib_flg = 0
res = client.post(url,data=dict(
submit="shib_form",
shibbolethRadios="0"
))
assert res.status_code == 200
assert current_app.config["WEKO_ACCOUNTS_SHIB_LOGIN_ENABLED"] == False
mock_render.assert_called_with(sibuser_html,shib_flg="0")

# raise BaseException
with patch("weko_accounts.admin.ShibSettingView.render",side_effect=BaseException):
res = client.post(url)
assert res.status_code == 400

# method is GET
mock_render = mocker.patch("weko_accounts.admin.ShibSettingView.render",return_value=make_response())
res = client.get(url)
assert res.status_code == 200
mock_render.assert_called_with(sibuser_html,shib_flg="0")
def test_index(self,app,client,users,mocker, admin_settings, db):
with app.app_context():
user = User.query.filter_by(email=users[0]['email']).first()
login(client=client, user=user)
url = url_for("shibboleth.index")
sibuser_html = 'weko_accounts/setting/shibuser.html'
mock_render = mocker.patch("weko_accounts.admin.ShibSettingView.render",return_value=make_response())
current_app.config["WEKO_ACCOUNTS_SHIB_LOGIN_ENABLED"] = True

# モックに渡す変数を設定
role_list = current_app.config['WEKO_ACCOUNTS_ROLE_LIST']
attr_list = current_app.config['WEKO_ACCOUNTS_ATTRIBUTE_LIST']
block_user_list = admin_settings[0].settings['blocked_ePPNs']
roles = admin_settings[2].settings
set_language = "en"
shib_flg = "1"
attributes = admin_settings[3].settings

data = {
"submit": "shib_form",
"shibbolethRadios": "1",
"block-eppn-option-list": json.dumps(block_user_list),
"enable-login-user-list": [],
}

for i, (_, value) in enumerate(roles.items()):
data[f"role-lists{i}"] = value

for i, (_, value) in enumerate(attributes.items()):
data[f"attr-lists{i}"] = value

# new_shib_flg = 1
res = client.post(url, data=data)

assert admin_settings[1].settings["shib_flg"] is True
assert res.status_code==200

mock_render.assert_called_with(
sibuser_html,
shib_flg=shib_flg,
set_language=set_language,
role_list=role_list,
attr_list=attr_list,
block_user_list=block_user_list,
enable_login_user_list=[],
**roles,
**attributes
)
current_app.config["WEKO_ACCOUNTS_SHIB_LOGIN_ENABLED"] = False

data["shibbolethRadios"] = "0"

# new_shib_flg = 0
res = client.post(url, data=data)

assert res.status_code == 200
assert admin_settings[1].settings["shib_flg"] is False
shib_flg = "0"
mock_render.assert_called_with(
sibuser_html,
shib_flg=shib_flg,
set_language=set_language,
role_list=role_list,
attr_list=attr_list,
block_user_list=block_user_list,
enable_login_user_list=[],
**roles,
**attributes
)

# デフォルトロールを変更
mock_render = mocker.patch("weko_accounts.admin.ShibSettingView.render",return_value=make_response())
roles = {
"gakunin_role": "Repository Administrator",
"orthros_outside_role": "None",
"extra_role": "Contributor"}

for i, (_, value) in enumerate(roles.items()):
data[f"role-lists{i}"] = value

res = client.post(url, data=data)

assert res.status_code == 200
assert admin_settings[2].settings["gakunin_role"] == "Repository Administrator"
assert admin_settings[2].settings["orthros_outside_role"] == "None"
assert admin_settings[2].settings["extra_role"] == "Contributor"
mock_render.assert_called_with(
sibuser_html,
shib_flg=shib_flg,
set_language=set_language,
role_list=role_list,
attr_list=attr_list,
block_user_list=block_user_list,
enable_login_user_list=[],
**roles,
**attributes
)

# 属性を変更
mock_render = mocker.patch("weko_accounts.admin.ShibSettingView.render",return_value=make_response())
attributes = {
"shib_eppn": "eduPersonAffiliation",
"shib_role_authority_name": "eppn",
"shib_mail": "DisplayName",
"shib_user_name": "sn"}

for i, (_, value) in enumerate(attributes.items()):
data[f"attr-lists{i}"] = value

res = client.post(url, data=data)

assert res.status_code == 200
assert admin_settings[3].settings["shib_eppn"] == "eduPersonAffiliation"
assert admin_settings[3].settings["shib_role_authority_name"] == "eppn"
assert admin_settings[3].settings["shib_mail"] == "DisplayName"
assert admin_settings[3].settings["shib_user_name"] == "sn"
mock_render.assert_called_with(
sibuser_html,
shib_flg=shib_flg,
set_language=set_language,
role_list=role_list,
attr_list=attr_list,
block_user_list=block_user_list,
enable_login_user_list=[],
**roles,
**attributes
)

# ブロックユーザーを変更
mock_render = mocker.patch("weko_accounts.admin.ShibSettingView.render",return_value=make_response())
block_user_list = ['test1','test2','test3']
data["block-eppn-option-list"] = json.dumps(block_user_list)

res = client.post(url, data=data)

assert res.status_code == 200
assert "test1" in admin_settings[0].settings["blocked_ePPNs"]

mock_render.assert_called_with(
sibuser_html,
shib_flg=shib_flg,
set_language=set_language,
role_list=role_list,
attr_list=attr_list,
block_user_list=str(block_user_list),
enable_login_user_list=[],
**roles,
**attributes
)

# raise BaseException
with patch("weko_accounts.admin.ShibSettingView.render",side_effect=BaseException):
res = client.post(url)
assert res.status_code == 400

# method is GET
mock_render = mocker.patch("weko_accounts.admin.ShibSettingView.render",return_value=make_response())
res = client.get(url)
assert res.status_code == 200
mock_render.assert_called_with(
sibuser_html,
shib_flg=shib_flg,
set_language=set_language,
role_list=role_list,
attr_list=attr_list,
block_user_list=block_user_list,
enable_login_user_list=[],
**roles,
**attributes
)

@pytest.fixture
def admin_settings(self, db):
settings = list()
settings.append(AdminSettings(id=6,name="blocked_user_settings",settings={"blocked_ePPNs": []}))
settings.append(AdminSettings(id=7,name="shib_login_enable",settings={"shib_flg": False}))
settings.append(AdminSettings(id=8,name="default_role_settings",settings={
"gakunin_role": "Contributor",
"orthros_outside_role": "Community Administrator",
"extra_role": "None"}))
settings.append(AdminSettings(id=9,name="attribute_mapping",settings={
"shib_eppn": "eppn",
"shib_role_authority_name": "eduPersonAffiliation",
"shib_mail": "mail",
"shib_user_name": "DisplayName"}))
db.session.add_all(settings)
db.session.commit()
return settings
Loading
Loading