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:

Reply via email to