This is an automated email from the ASF dual-hosted git repository.
lahirujayathilake pushed a commit to branch cybershuttle-staging
in repository https://gitbox.apache.org/repos/asf/airavata.git
The following commit(s) were added to refs/heads/cybershuttle-staging by this
push:
new c0dbc72dc1 dev authz token filter for development
c0dbc72dc1 is described below
commit c0dbc72dc1449020705d23376f6c6c93c9c5bcc3
Author: lahiruj <[email protected]>
AuthorDate: Mon Mar 31 17:55:22 2025 -0400
dev authz token filter for development
---
.../research-framework/research-service/README.md | 21 ++++++++
.../research-framework/research-service/pom.xml | 5 ++
.../research/service/config/AuthzTokenFilter.java | 4 +-
.../service/config/DevAuthzTokenFilter.java | 57 ++++++++++++++++++++++
.../DevDataInitializer.java} | 32 ++++++++++--
.../research/service/handlers/UserHandler.java | 2 +-
.../research/service/model/entity/Session.java | 2 +-
.../src/main/resources/application.yml | 5 +-
8 files changed, 116 insertions(+), 12 deletions(-)
diff --git a/modules/research-framework/research-service/README.md
b/modules/research-framework/research-service/README.md
new file mode 100644
index 0000000000..f2d87cd7b9
--- /dev/null
+++ b/modules/research-framework/research-service/README.md
@@ -0,0 +1,21 @@
+# Research Service Application
+
+This Spring Boot application supports different profiles for running in
production vs development mode. In production mode, a security filter enforces
authentication. In development mode, the security filter is bypassed for easier
local testing.
+
+## Running in Development Mode
+
+### Using Maven
+
+```bash
+mvn spring-boot:run -Dspring-boot.run.profiles=dev
+```
+
+### Using IntelliJ IDEA
+
+1. Go to Run > Edit Configurations.
+2. Select your Spring Boot run configuration
+3. In the Program arguments field, add:
+
+```bash
+--spring.profiles.active=dev
+```
diff --git a/modules/research-framework/research-service/pom.xml
b/modules/research-framework/research-service/pom.xml
index 1a5869c26c..9d7c2ccec3 100644
--- a/modules/research-framework/research-service/pom.xml
+++ b/modules/research-framework/research-service/pom.xml
@@ -193,6 +193,11 @@
</includes>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-maven-plugin</artifactId>
+ <version>${spring.boot.version}</version>
+ </plugin>
</plugins>
</build>
</project>
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/AuthzTokenFilter.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/AuthzTokenFilter.java
index 0feac1cf6a..0e370854a9 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/AuthzTokenFilter.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/AuthzTokenFilter.java
@@ -30,7 +30,7 @@ import org.apache.airavata.research.service.model.UserContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
@@ -38,7 +38,7 @@ import java.io.IOException;
import java.util.Map;
@Component
-@ConditionalOnProperty(name = "auth.filter.enabled", havingValue = "true",
matchIfMissing = true)
+@Profile("!dev")
public class AuthzTokenFilter extends OncePerRequestFilter {
private static final Logger LOGGER =
LoggerFactory.getLogger(AuthzTokenFilter.class);
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/DevAuthzTokenFilter.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/DevAuthzTokenFilter.java
new file mode 100644
index 0000000000..8801691847
--- /dev/null
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/DevAuthzTokenFilter.java
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.airavata.research.service.config;
+
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.apache.airavata.research.service.handlers.UserHandler;
+import org.apache.airavata.research.service.model.UserContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Component;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+import java.io.IOException;
+
+@Component
+@Profile("dev")
+public class DevAuthzTokenFilter extends OncePerRequestFilter {
+
+ private static final Logger LOGGER =
LoggerFactory.getLogger(DevAuthzTokenFilter.class);
+
+ private final UserHandler userHandler;
+
+ @Value("${cybershuttle.hub.dev-user}")
+ private String devUserEmail;
+
+ public DevAuthzTokenFilter(UserHandler userHandler) {
+ this.userHandler = userHandler;
+ }
+
+ @Override
+ protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain) throws ServletException,
IOException {
+ LOGGER.warn("Dev mode: Skipping auth filter.");
+ UserContext.setUser(userHandler.findUserByUsername(devUserEmail));
+ filterChain.doFilter(request, response);
+ }
+}
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/DataInitializer.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/DevDataInitializer.java
similarity index 66%
rename from
modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/DataInitializer.java
rename to
modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/DevDataInitializer.java
index 5d7389cdb8..63113523a2 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/DataInitializer.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/DevDataInitializer.java
@@ -1,4 +1,22 @@
-package org.apache.airavata.research.service;
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.airavata.research.service.config;
import org.apache.airavata.research.service.enums.PrivacyEnum;
import org.apache.airavata.research.service.enums.StatusEnum;
@@ -9,17 +27,23 @@ import
org.apache.airavata.research.service.model.entity.User;
import org.apache.airavata.research.service.model.repo.ProjectRepository;
import org.apache.airavata.research.service.model.repo.ResourceRepository;
import org.apache.airavata.research.service.model.repo.UserRepository;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
+import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
@Component
-public class DataInitializer implements CommandLineRunner {
+@Profile("dev")
+public class DevDataInitializer implements CommandLineRunner {
private final UserRepository userRepository;
private final ProjectRepository projectRepository;
private final ResourceRepository resourceRepository;
- public DataInitializer(UserRepository userRepository, ProjectRepository
projectRepository, ResourceRepository resourceRepository) {
+ @Value("${cybershuttle.hub.dev-user}")
+ private String devUserEmail;
+
+ public DevDataInitializer(UserRepository userRepository, ProjectRepository
projectRepository, ResourceRepository resourceRepository) {
this.userRepository = userRepository;
this.projectRepository = projectRepository;
this.resourceRepository = resourceRepository;
@@ -29,7 +53,7 @@ public class DataInitializer implements CommandLineRunner {
public void run(String... args) {
cleanup();
- User user = new User("[email protected]", "airavata", "admin",
"[email protected]");
+ User user = new User(devUserEmail, "airavata", "admin", devUserEmail);
userRepository.save(user);
RepositoryResource repositoryResource = new RepositoryResource();
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/UserHandler.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/UserHandler.java
index 7959c37676..b7aead4c6f 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/UserHandler.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/UserHandler.java
@@ -67,7 +67,7 @@ public class UserHandler {
}
public User findUserByUsername(String username) {
- return userRepository.findById(username).orElseThrow(() -> {
+ return userRepository.findByUsername(username).orElseThrow(() -> {
LOGGER.error("Unable to find a User with a username: " + username);
return new EntityNotFoundException("Unable to find a User with a
username: " + username);
});
diff --git
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Session.java
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Session.java
index 46f7d47391..826391ae11 100644
---
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Session.java
+++
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Session.java
@@ -45,7 +45,7 @@ public class Session {
@Column(nullable = false, updatable = false, length = 48)
private String id;
- @Column(nullable = false, unique = true)
+ @Column(nullable = false)
private String sessionName;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
diff --git
a/modules/research-framework/research-service/src/main/resources/application.yml
b/modules/research-framework/research-service/src/main/resources/application.yml
index 510373731b..7e7f285635 100644
---
a/modules/research-framework/research-service/src/main/resources/application.yml
+++
b/modules/research-framework/research-service/src/main/resources/application.yml
@@ -9,10 +9,7 @@ server:
cybershuttle:
hub:
url: https://hub.dev.cybershuttle.org
-
-auth:
- filter:
- enabled: false
+ dev-user: "CHANGE_ME"
spring:
servlet: