From 9fa9deddc0d9ddfac185b57e9d6536d5bd395dd0 Mon Sep 17 00:00:00 2001 From: Steinar Bang Date: Sun, 2 Jun 2024 20:21:54 +0200 Subject: [PATCH 1/5] Remove TODOs from generated UkelonnService implementation used in test --- .../bang/ukelonn/backend/UkelonnServiceBaseTest.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/ukelonn.backend/src/test/java/no/priv/bang/ukelonn/backend/UkelonnServiceBaseTest.java b/ukelonn.backend/src/test/java/no/priv/bang/ukelonn/backend/UkelonnServiceBaseTest.java index ccc39fd0..ee248860 100644 --- a/ukelonn.backend/src/test/java/no/priv/bang/ukelonn/backend/UkelonnServiceBaseTest.java +++ b/ukelonn.backend/src/test/java/no/priv/bang/ukelonn/backend/UkelonnServiceBaseTest.java @@ -129,61 +129,51 @@ public Account addAccount(User user) { @Override public List earningsSumOverYear(String username) { - // TODO Auto-generated method stub return null; } @Override public List earningsSumOverMonth(String username) { - // TODO Auto-generated method stub return null; } @Override public List getActiveBonuses() { - // TODO Auto-generated method stub return null; } @Override public List getAllBonuses() { - // TODO Auto-generated method stub return null; } @Override public List createBonus(Bonus newBonus) { - // TODO Auto-generated method stub return null; } @Override public List modifyBonus(Bonus updatedBonus) { - // TODO Auto-generated method stub return null; } @Override public List deleteBonus(Bonus removedBonus) { - // TODO Auto-generated method stub return null; } @Override public Locale defaultLocale() { - // TODO Auto-generated method stub return null; } @Override public List availableLocales() { - // TODO Auto-generated method stub return null; } @Override public Map displayTexts(Locale locale) { - // TODO Auto-generated method stub return null; } }; From 90332934b34fd33a1d711bb5aefbc4818149164b Mon Sep 17 00:00:00 2001 From: Steinar Bang Date: Sun, 2 Jun 2024 20:27:20 +0200 Subject: [PATCH 2/5] Change exception throw declaration of tests --- .../production/ProductionLiquibaseRunnerTest.java | 2 +- .../db/liquibase/test/TestLiquibaseRunnerTest.java | 2 +- .../ukelonn/api/resources/AccountResourceTest.java | 10 +++++----- .../priv/bang/ukelonn/api/resources/AccountsTest.java | 2 +- .../bang/ukelonn/api/resources/JobResourceTest.java | 10 +++++----- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ukelonn.db.liquibase.production/src/test/java/no/priv/bang/ukelonn/db/liquibase/production/ProductionLiquibaseRunnerTest.java b/ukelonn.db.liquibase.production/src/test/java/no/priv/bang/ukelonn/db/liquibase/production/ProductionLiquibaseRunnerTest.java index 8a6bfc0d..c236c586 100644 --- a/ukelonn.db.liquibase.production/src/test/java/no/priv/bang/ukelonn/db/liquibase/production/ProductionLiquibaseRunnerTest.java +++ b/ukelonn.db.liquibase.production/src/test/java/no/priv/bang/ukelonn/db/liquibase/production/ProductionLiquibaseRunnerTest.java @@ -82,7 +82,7 @@ void testInsertInitialDataInDatabaseFailToCreateLiquibase() throws Exception { } @Test - void testCreateUkelonnLiquibaseDefault() throws Exception { + void testCreateUkelonnLiquibaseDefault() { var runner = new ProductionLiquibaseRunner(); var logservice = new MockLogService(); runner.setLogService(logservice); diff --git a/ukelonn.db.liquibase.test/src/test/java/no/priv/bang/ukelonn/db/liquibase/test/TestLiquibaseRunnerTest.java b/ukelonn.db.liquibase.test/src/test/java/no/priv/bang/ukelonn/db/liquibase/test/TestLiquibaseRunnerTest.java index a9c1a74e..16ad7e6e 100644 --- a/ukelonn.db.liquibase.test/src/test/java/no/priv/bang/ukelonn/db/liquibase/test/TestLiquibaseRunnerTest.java +++ b/ukelonn.db.liquibase.test/src/test/java/no/priv/bang/ukelonn/db/liquibase/test/TestLiquibaseRunnerTest.java @@ -61,7 +61,7 @@ class TestLiquibaseRunnerTest { @Test - void testPrepareDatabase() throws SQLException, DatabaseException { + void testPrepareDatabase() throws Exception { var dataSourceFactory = new DerbyDataSourceFactory(); var derbyMemoryCredentials = createDerbyMemoryCredentials("ukelonn_pure", "no"); var datasource = dataSourceFactory.createDataSource(derbyMemoryCredentials); diff --git a/ukelonn.web.services/src/test/java/no/priv/bang/ukelonn/api/resources/AccountResourceTest.java b/ukelonn.web.services/src/test/java/no/priv/bang/ukelonn/api/resources/AccountResourceTest.java index 82bdcac0..e5af6899 100644 --- a/ukelonn.web.services/src/test/java/no/priv/bang/ukelonn/api/resources/AccountResourceTest.java +++ b/ukelonn.web.services/src/test/java/no/priv/bang/ukelonn/api/resources/AccountResourceTest.java @@ -40,7 +40,7 @@ class AccountResourceTest extends ServletTestBase { } @Test - void testGetAccount() throws Exception { + void testGetAccount() { // Create the request and response for the Shiro login var request = mock(HttpServletRequest.class); var session = mock(HttpSession.class); @@ -77,7 +77,7 @@ void testGetAccount() throws Exception { * @throws Exception */ @Test - void testGetAccountOtherUsername() throws Exception { + void testGetAccountOtherUsername() { // Create the request and response for the Shiro login var request = mock(HttpServletRequest.class); var session = mock(HttpSession.class); @@ -111,7 +111,7 @@ void testGetAccountOtherUsername() throws Exception { * @throws Exception */ @Test - void testGetAccountWhenLoggedInAsAdministrator() throws Exception { + void testGetAccountWhenLoggedInAsAdministrator() { // Create the request and response for the Shiro login var request = mock(HttpServletRequest.class); var session = mock(HttpSession.class); @@ -142,7 +142,7 @@ void testGetAccountWhenLoggedInAsAdministrator() throws Exception { } @Test - void testGetAccountNoUsername() throws Exception { + void testGetAccountNoUsername() { // Create the request and response for the Shiro login var request = mock(HttpServletRequest.class); var session = mock(HttpSession.class); @@ -166,7 +166,7 @@ void testGetAccountNoUsername() throws Exception { } @Test - void testGetAccountUsernameNotPresentInDatabase() throws Exception { + void testGetAccountUsernameNotPresentInDatabase() { // Create the request and response for the Shiro login var request = mock(HttpServletRequest.class); var session = mock(HttpSession.class); diff --git a/ukelonn.web.services/src/test/java/no/priv/bang/ukelonn/api/resources/AccountsTest.java b/ukelonn.web.services/src/test/java/no/priv/bang/ukelonn/api/resources/AccountsTest.java index 3f177885..fbfd30fd 100644 --- a/ukelonn.web.services/src/test/java/no/priv/bang/ukelonn/api/resources/AccountsTest.java +++ b/ukelonn.web.services/src/test/java/no/priv/bang/ukelonn/api/resources/AccountsTest.java @@ -25,7 +25,7 @@ class AccountsTest { @Test - void testGetAccounts() throws Exception { + void testGetAccounts() { // Create the object to be tested var resource = new Accounts(); diff --git a/ukelonn.web.services/src/test/java/no/priv/bang/ukelonn/api/resources/JobResourceTest.java b/ukelonn.web.services/src/test/java/no/priv/bang/ukelonn/api/resources/JobResourceTest.java index 35f2b4aa..d4fc4533 100644 --- a/ukelonn.web.services/src/test/java/no/priv/bang/ukelonn/api/resources/JobResourceTest.java +++ b/ukelonn.web.services/src/test/java/no/priv/bang/ukelonn/api/resources/JobResourceTest.java @@ -52,7 +52,7 @@ class JobResourceTest extends ServletTestBase { } @Test - void testRegisterJob() throws Exception { + void testRegisterJob() { // Create the request var account = getJadAccount(); var originalBalance = account.balance(); @@ -101,7 +101,7 @@ void testRegisterJob() throws Exception { * @throws Exception */ @Test - void testRegisterJobOtherUsername() throws Exception { + void testRegisterJobOtherUsername() { // Create the request var account = getJodAccount(); var jobTypes = getJobtypes(); @@ -143,7 +143,7 @@ void testRegisterJobOtherUsername() throws Exception { * @throws Exception */ @Test - void testRegisterJobtWhenLoggedInAsAdministrator() throws Exception { + void testRegisterJobtWhenLoggedInAsAdministrator() { // Create the request var account = getJadAccount(); var originalBalance = account.balance(); @@ -186,7 +186,7 @@ void testRegisterJobtWhenLoggedInAsAdministrator() throws Exception { } @Test - void testRegisterJobNoUsername() throws Exception { + void testRegisterJobNoUsername() { // Create the request var account = Account.with().build(); var jobTypes = getJobtypes(); @@ -230,7 +230,7 @@ void testRegisterJobNoUsername() throws Exception { * @throws Exception */ @Test - void testRegisterJobInternalServerError() throws Exception { + void testRegisterJobInternalServerError() { // Create the request var account = Account.with().build(); var jobTypes = getJobtypes(); From f514a6906225245e472dca58cc028da51a284cbf Mon Sep 17 00:00:00 2001 From: Steinar Bang Date: Sun, 9 Jun 2024 17:27:29 +0200 Subject: [PATCH 3/5] Revert "Manually create PassThruAuthenticationFilter because the shiro 2.x INI parser can't find and create it when running in OSGi" This reverts commit 6e039a3b5671dc25577113a7d6c28e837e1601a7. --- .../no/priv/bang/ukelonn/web/security/UkelonnShiroFilter.java | 2 -- ukelonn.web.security/src/main/resources/shiro.ini | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/ukelonn.web.security/src/main/java/no/priv/bang/ukelonn/web/security/UkelonnShiroFilter.java b/ukelonn.web.security/src/main/java/no/priv/bang/ukelonn/web/security/UkelonnShiroFilter.java index 6ef65f76..d2980bcd 100644 --- a/ukelonn.web.security/src/main/java/no/priv/bang/ukelonn/web/security/UkelonnShiroFilter.java +++ b/ukelonn.web.security/src/main/java/no/priv/bang/ukelonn/web/security/UkelonnShiroFilter.java @@ -21,7 +21,6 @@ import org.apache.shiro.realm.Realm; import org.apache.shiro.session.mgt.eis.SessionDAO; import org.apache.shiro.web.env.IniWebEnvironment; -import org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.apache.shiro.web.servlet.AbstractShiroFilter; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; @@ -67,7 +66,6 @@ public void setSession(SessionDAO session) { @Activate public void activate() { var environment = new IniWebEnvironment(); - environment.getObjects().put("authc", new PassThruAuthenticationFilter()); environment.setIni(INI_FILE); environment.setServletContext(getServletContext()); environment.init(); diff --git a/ukelonn.web.security/src/main/resources/shiro.ini b/ukelonn.web.security/src/main/resources/shiro.ini index 7a73a8f2..51f5a927 100644 --- a/ukelonn.web.security/src/main/resources/shiro.ini +++ b/ukelonn.web.security/src/main/resources/shiro.ini @@ -1,5 +1,6 @@ [main] shiro.loginUrl = /login +authc = org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter authc.loginUrl = /login shiro.unauthorizedUrl = /unauthorized From 52caf4474700a3a102d03f754ac856bb95878b19 Mon Sep 17 00:00:00 2001 From: Steinar Bang Date: Sun, 9 Jun 2024 18:54:55 +0200 Subject: [PATCH 4/5] Import package containing PassThruAuthenticationFilter and set class loader so that shiro INI parser can instantiate PassThruAuthenticationFilter --- ukelonn.web.security/pom.xml | 5 +++++ .../priv/bang/ukelonn/web/security/UkelonnShiroFilter.java | 1 + 2 files changed, 6 insertions(+) diff --git a/ukelonn.web.security/pom.xml b/ukelonn.web.security/pom.xml index 119546ff..db40ef3e 100644 --- a/ukelonn.web.security/pom.xml +++ b/ukelonn.web.security/pom.xml @@ -179,6 +179,11 @@ org.apache.felix maven-bundle-plugin + + + *,org.apache.shiro.web.filter.authc + + org.apache.karaf.tooling diff --git a/ukelonn.web.security/src/main/java/no/priv/bang/ukelonn/web/security/UkelonnShiroFilter.java b/ukelonn.web.security/src/main/java/no/priv/bang/ukelonn/web/security/UkelonnShiroFilter.java index d2980bcd..f5dc86a4 100644 --- a/ukelonn.web.security/src/main/java/no/priv/bang/ukelonn/web/security/UkelonnShiroFilter.java +++ b/ukelonn.web.security/src/main/java/no/priv/bang/ukelonn/web/security/UkelonnShiroFilter.java @@ -65,6 +65,7 @@ public void setSession(SessionDAO session) { @Activate public void activate() { + Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); // Set class loader that can find PassThruAuthenticationFilter for the Shiro INI parser var environment = new IniWebEnvironment(); environment.setIni(INI_FILE); environment.setServletContext(getServletContext()); From 2d5ec761b6db197c7eecdbe396dad7ed6a326fa1 Mon Sep 17 00:00:00 2001 From: Steinar Bang Date: Mon, 17 Jun 2024 16:30:09 +0200 Subject: [PATCH 5/5] Use npm transitive dependency braces 3.0.3 --- .../src/main/frontend/package-lock.json | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/ukelonn.web.frontend/src/main/frontend/package-lock.json b/ukelonn.web.frontend/src/main/frontend/package-lock.json index 2a214608..f0ca326c 100644 --- a/ukelonn.web.frontend/src/main/frontend/package-lock.json +++ b/ukelonn.web.frontend/src/main/frontend/package-lock.json @@ -2886,12 +2886,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -4018,9 +4018,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -9178,12 +9178,12 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { @@ -9978,9 +9978,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1"