diff --git a/README.md b/README.md
index 39d2482..a1783b5 100644
--- a/README.md
+++ b/README.md
@@ -16,24 +16,30 @@ Through this webapp you can launch and control your scheduled job. The UI Consol
Open the [Project Roadmap](https://github.com/fabioformosa/quartz-manager/projects) to take a look at the plan of Quartz Manager.
Currently this project might be useful to look how to import Quartz Library in a spring boot application. For this purpose, browse the folder `quartz-manager-parent/quartz-manager-api`.
We're just working to create a library, from project `quartz-manager-parent/quartz-manager-api`, to be imported in your spring boot where you have your job to be scheduled.
-The project `quartz-manager-parent/quartz-manager-web` is an example of how-to:
- * import the library
- * set the application.yml
- * add secure layer
+
+Take a loot to the project [Quartz-Manager Demo](https://github.com/fabioformosa/quartz-manager-demo), it is an example of how-to:
+ * import the quartz-manager-api library in your webapp
+ * include the quartz-manager frontend (angular based) through a webjar
+ * set properties into the application.yml
+ * add a secure layer to allow the API only to logged users
* schedule a custom job (a dummy `hello world`)
+
+ **NB: In few days, we'll release the library jar of quartz-manager into the maven central repo.**
+
+Next steps in the roadmap are:
+* to add a persistent layer to save all job setup.
+* to add a complete setup UI panel for quartz, in term of cronjobs and multiple jobs.
+* to add CI/CD pipeline to ease the deploy pulling a docker container.
+* Enabling adapters for integrations: kafka, etc.
## PROJECT STRUCTURE
* **quartz-parent/quartz-manager-api** is the library that can be imported in webapp to have the quartz-manager API.
-* **quartz-parent/quartz-manager-web** is an example of webapp that imports quartz-manager-api. It adds a secure layer and a custom job to be scheduled.
+* **quartz-parent/quartz-manager-webjar** is a maven module to build and package the angular frontend in a webjar.
+* **quartz-parent/quartz-manager-security** is ther library that can be imported in a webapp to have a security layer (login) over the quartz-manager API.
+* **quartz-parent/quartz-manager-web-showcase** is an example of webapp that imports quartz-manager-api. Useful to develop the frontend started locally with the webpack dev server.
* **quartz-frontend** is the angular app that interacts with the Quartz Manager API.
-Next steps in the roadmap are:
-* to simplify the customization of the job through plugins
-* to add CI/CD pipeline to ease the deploy pulling a docker container
-* to add a complete setup UI panel for quartz, in term of cronjobs and multiple jobs
-* to add a persistent layer to save all job logs.
-
-## QUICK START
+## HOW-TO CONTRIBUTE
**[requirements]** Make sure you have installed
* [Java 8](https://java.com/download/) or greater
* [Maven](https://maven.apache.org/)
diff --git a/quartz-manager-frontend/angular.json b/quartz-manager-frontend/angular.json
index ce967bd..7ebabad 100644
--- a/quartz-manager-frontend/angular.json
+++ b/quartz-manager-frontend/angular.json
@@ -12,7 +12,7 @@
"builder": "@angular-devkit/build-angular:browser",
"options": {
"aot": true,
- "outputPath": "../server/src/main/resources/static",
+ "outputPath": "dist",
"index": "src/index.html",
"main": "src/main.ts",
"tsConfig": "src/tsconfig.app.json",
diff --git a/quartz-manager-frontend/package.json b/quartz-manager-frontend/package.json
index 8e7cf69..d416c60 100644
--- a/quartz-manager-frontend/package.json
+++ b/quartz-manager-frontend/package.json
@@ -5,7 +5,7 @@
"scripts": {
"ng": "ng",
"start": "ng serve --proxy-config proxy.conf.json",
- "build": "ng build",
+ "build": "ng build --prod",
"test": "jest",
"lint": "ng lint",
"e2e": "ng e2e"
diff --git a/quartz-manager-frontend/src/app/app.module.ts b/quartz-manager-frontend/src/app/app.module.ts
index 90e0d34..5274d28 100644
--- a/quartz-manager-frontend/src/app/app.module.ts
+++ b/quartz-manager-frontend/src/app/app.module.ts
@@ -45,15 +45,19 @@ import {
SchedulerService,
ConfigService,
ProgressWebsocketService,
- LogsWebsocketService
+ LogsWebsocketService,
+ getHtmlBaseUrl
} from './services';
import { ChangePasswordComponent } from './views/change-password/change-password.component';
import { ForbiddenComponent } from './views/forbidden/forbidden.component';
+import { APP_BASE_HREF } from '@angular/common';
+import { environment } from '../environments/environment';
export function initUserFactory(userService: UserService) {
return () => userService.jsessionInitUser();
}
+
// const stompConfig: StompConfig = {
// // Which server?
// url: 'ws://localhost:8080/quartz-manager/progress',
@@ -131,6 +135,16 @@ export function jwtOptionsFactory(apiService: ApiService) {
FlexLayoutModule
],
providers: [
+ {
+ provide: APP_BASE_HREF,
+ useValue: getHtmlBaseUrl()
+ },
+ {
+ 'provide': APP_INITIALIZER,
+ 'useFactory': initUserFactory,
+ 'deps': [UserService],
+ 'multi': true
+ },
LoginGuard,
GuestGuard,
AdminGuard,
@@ -141,13 +155,7 @@ export function jwtOptionsFactory(apiService: ApiService) {
ApiService,
UserService,
ConfigService,
- MatIconRegistry,
- {
- 'provide': APP_INITIALIZER,
- 'useFactory': initUserFactory,
- 'deps': [UserService],
- 'multi': true
- }
+ MatIconRegistry
// StompService,
// ServerSocket
// {
diff --git a/quartz-manager-frontend/src/app/services/api.service.ts b/quartz-manager-frontend/src/app/services/api.service.ts
index d89a780..c7fde7c 100644
--- a/quartz-manager-frontend/src/app/services/api.service.ts
+++ b/quartz-manager-frontend/src/app/services/api.service.ts
@@ -53,9 +53,6 @@ export class ApiService {
if (args)
options['params'] = serialize(args);
- // if(this.jwtToken)
- // options.headers = options.headers.set('Authorization', `Bearer ${this.jwtToken}`);
-
return this.http.get(path, options)
.pipe(catchError(this.checkError.bind(this)));
}
@@ -78,9 +75,6 @@ export class ApiService {
withCredentials: true
}
- // if(this.jwtToken)
- // options.headers = options.headers.append('Authorization', `Bearer ${this.jwtToken}`);
-
const req = new HttpRequest(method, path, body, options);
return this.http.request(req)
diff --git a/quartz-manager-frontend/src/app/services/config.service.ts b/quartz-manager-frontend/src/app/services/config.service.ts
index 28ad1f5..9294bec 100644
--- a/quartz-manager-frontend/src/app/services/config.service.ts
+++ b/quartz-manager-frontend/src/app/services/config.service.ts
@@ -1,9 +1,30 @@
import { Injectable } from '@angular/core';
+import { environment } from '../../environments/environment';
+
+
+const WEBJAR_PATH = '/quartz-manager-ui/';
+
+export function getHtmlBaseUrl(){
+ const baseUrl = getBaseUrl() || '/';
+ return environment.production ? getBaseUrl() + WEBJAR_PATH: '/';
+ }
+
+export function getBaseUrl(){
+ if(environment.production){
+ let contextPath: string = window.location.pathname.split('/')[1] || '';
+ if(contextPath && ('/' + contextPath + '/') === WEBJAR_PATH)
+ return '';
+ if(contextPath)
+ contextPath = '/' + contextPath;
+ return contextPath;
+ }
+ return '';
+}
@Injectable()
export class ConfigService {
- private _api_url = '/quartz-manager/api'
+ private _api_url = getBaseUrl() + '/quartz-manager/api'
private _refresh_token_url = this._api_url + '/refresh';
diff --git a/quartz-manager-frontend/src/app/services/logs.websocket.service.ts b/quartz-manager-frontend/src/app/services/logs.websocket.service.ts
index fe2cd06..989269c 100644
--- a/quartz-manager-frontend/src/app/services/logs.websocket.service.ts
+++ b/quartz-manager-frontend/src/app/services/logs.websocket.service.ts
@@ -1,12 +1,12 @@
-import { Injectable, OnInit } from '@angular/core';
-import { WebsocketService, ApiService } from '.';
+import { Injectable } from '@angular/core';
+import { WebsocketService, ApiService, getBaseUrl } from '.';
import { SocketOption } from '../model/SocketOption.model';
@Injectable()
export class LogsWebsocketService extends WebsocketService {
constructor(private apiService: ApiService){
- super(new SocketOption('/quartz-manager/logs', '/topic/logs', apiService.getToken))
+ super(new SocketOption( getBaseUrl() +'/quartz-manager/logs', '/topic/logs', apiService.getToken))
}
}
\ No newline at end of file
diff --git a/quartz-manager-frontend/src/app/services/progress.websocket.service.ts b/quartz-manager-frontend/src/app/services/progress.websocket.service.ts
index 173428b..f81c627 100644
--- a/quartz-manager-frontend/src/app/services/progress.websocket.service.ts
+++ b/quartz-manager-frontend/src/app/services/progress.websocket.service.ts
@@ -1,12 +1,12 @@
-import { Injectable, OnInit } from '@angular/core';
-import { WebsocketService, ApiService } from '.';
+import { Injectable } from '@angular/core';
+import { WebsocketService, ApiService, getBaseUrl } from '.';
import { SocketOption } from '../model/SocketOption.model';
@Injectable()
export class ProgressWebsocketService extends WebsocketService {
constructor(private apiService: ApiService){
- super(new SocketOption('/quartz-manager/progress', '/topic/progress', apiService.getToken))
+ super(new SocketOption(getBaseUrl() + '/quartz-manager/progress', '/topic/progress', apiService.getToken))
}
}
\ No newline at end of file
diff --git a/quartz-manager-frontend/src/app/services/scheduler.service.ts b/quartz-manager-frontend/src/app/services/scheduler.service.ts
index f2b351b..a4b4251 100644
--- a/quartz-manager-frontend/src/app/services/scheduler.service.ts
+++ b/quartz-manager-frontend/src/app/services/scheduler.service.ts
@@ -1,4 +1,5 @@
import { Injectable } from '@angular/core';
+import { getBaseUrl } from '.';
import { ApiService } from './api.service';
@Injectable()
@@ -9,30 +10,30 @@ export class SchedulerService {
) { }
startScheduler = () => {
- return this.apiService.get('/quartz-manager/scheduler/run')
+ return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/run')
}
stopScheduler = () => {
- return this.apiService.get('/quartz-manager/scheduler/stop')
+ return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/stop')
}
pauseScheduler = () => {
- return this.apiService.get('/quartz-manager/scheduler/pause')
+ return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/pause')
}
resumeScheduler = () => {
- return this.apiService.get('/quartz-manager/scheduler/resume')
+ return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/resume')
}
getStatus = () => {
- return this.apiService.get('/quartz-manager/scheduler')
+ return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler')
}
getConfig = () => {
- return this.apiService.get('/quartz-manager/scheduler/config')
+ return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/config')
}
updateConfig = (config: Object) => {
- return this.apiService.post('/quartz-manager/scheduler/config', config)
+ return this.apiService.post(getBaseUrl() + '/quartz-manager/scheduler/config', config)
}
}
diff --git a/quartz-manager-frontend/src/index.html b/quartz-manager-frontend/src/index.html
index 8b9f67a..bd33166 100644
--- a/quartz-manager-frontend/src/index.html
+++ b/quartz-manager-frontend/src/index.html
@@ -3,7 +3,6 @@
Quartz Manager
-
diff --git a/quartz-manager-parent/.gitignore b/quartz-manager-parent/.gitignore
index 0c2b833..d6593c5 100644
--- a/quartz-manager-parent/.gitignore
+++ b/quartz-manager-parent/.gitignore
@@ -1,2 +1,5 @@
-/.settings/
+/**/.settings/
/.project
+/**/target
+.classpath
+.project
diff --git a/quartz-manager-parent/pom.xml b/quartz-manager-parent/pom.xml
index 8ff19a3..57c3d5f 100644
--- a/quartz-manager-parent/pom.xml
+++ b/quartz-manager-parent/pom.xml
@@ -17,7 +17,9 @@
quartz-manager-api
- quartz-manager-web
+ quartz-manager-ui-webjar
+ quartz-manager-security
+ quartz-manager-web-showcase
@@ -27,6 +29,16 @@
quartz-manager-api
2.2.2-SNAPSHOT
+
+ it.fabioformosa.quartz-manager
+ quartz-manager-security
+ 2.2.2-SNAPSHOT
+
+
+ it.fabioformosa.quartz-manager
+ quartz-manager-ui-webjar
+ 2.2.2-SNAPSHOT
+
diff --git a/quartz-manager-parent/quartz-manager-api/pom.xml b/quartz-manager-parent/quartz-manager-api/pom.xml
index 83df094..dc931ef 100644
--- a/quartz-manager-parent/quartz-manager-api/pom.xml
+++ b/quartz-manager-parent/quartz-manager-api/pom.xml
@@ -38,6 +38,10 @@
org.springframework.boot
spring-boot-starter-websocket
+
+
+ org.springframework.security
+ spring-security-core
org.springframework.boot
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/controllers/UserController.java b/quartz-manager-parent/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/controllers/UserController.java
similarity index 76%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/controllers/UserController.java
rename to quartz-manager-parent/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/controllers/UserController.java
index 5df6496..5e431ea 100644
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/controllers/UserController.java
+++ b/quartz-manager-parent/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/controllers/UserController.java
@@ -1,16 +1,26 @@
package it.fabioformosa.quartzmanager.controllers;
import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/quartz-manager/api", produces = MediaType.APPLICATION_JSON_VALUE)
public class UserController {
+
+ @GetMapping("/whoami")
+ public @ResponseBody Object user() {
+ SecurityContext context = SecurityContextHolder.getContext();
+ if(context != null && context.getAuthentication() != null)
+ return context.getAuthentication().getPrincipal();
+ return "\"NO_AUTH\"";
+ }
+
/**
* JWT Temporary disabled
*
@@ -54,20 +64,4 @@ public class UserController {
// return ResponseEntity.accepted().body(result);
// }
- /*
- * We are not using userService.findByUsername here(we could), so it is good that we are making
- * sure that the user has role "ROLE_USER" to access this endpoint.
- */
- // @RequestMapping("/whoami")
- // // @PreAuthorize("hasRole('USER')")
- // public User user() {
- // return (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
- // }
-
- @GetMapping("/whoami")
- @PreAuthorize("isAuthenticated()")
- public Object user() {
- return SecurityContextHolder.getContext().getAuthentication().getPrincipal();
- }
-
}
diff --git a/quartz-manager-parent/quartz-manager-security/pom.xml b/quartz-manager-parent/quartz-manager-security/pom.xml
new file mode 100644
index 0000000..d8945a3
--- /dev/null
+++ b/quartz-manager-parent/quartz-manager-security/pom.xml
@@ -0,0 +1,57 @@
+
+ 4.0.0
+
+ it.fabioformosa.quartz-manager
+ quartz-manager-parent
+ 2.2.2-SNAPSHOT
+
+
+ quartz-manager-security
+
+ Quartz Manager Security
+ Security Layer for Quartz Manager
+
+ https://github.com/fabioformosa/quartz-manager
+
+ ${basedir}/../..
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.0
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+ javax.servlet
+ javax.servlet-api
+ provided
+
+
+
+
\ No newline at end of file
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/configuration/WebSecurityConfigJWT.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/configuration/WebSecurityConfigJWT.java
similarity index 93%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/configuration/WebSecurityConfigJWT.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/configuration/WebSecurityConfigJWT.java
index c3e2d8c..c5bcb07 100644
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/configuration/WebSecurityConfigJWT.java
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/configuration/WebSecurityConfigJWT.java
@@ -1,4 +1,4 @@
-package it.fabioformosa.quartzmanager.configuration;
+package it.fabioformosa.quartzmanager.security.configuration;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,8 +27,8 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import com.fasterxml.jackson.databind.ObjectMapper;
-import it.fabioformosa.quartzmanager.configuration.properties.InMemoryAccountProperties;
-import it.fabioformosa.quartzmanager.configuration.properties.JwtSecurityProperties;
+import it.fabioformosa.quartzmanager.security.configuration.properties.InMemoryAccountProperties;
+import it.fabioformosa.quartzmanager.security.configuration.properties.JwtSecurityProperties;
import it.fabioformosa.quartzmanager.security.helpers.LoginConfigurer;
import it.fabioformosa.quartzmanager.security.helpers.impl.AuthenticationFailureHandler;
import it.fabioformosa.quartzmanager.security.helpers.impl.AuthenticationSuccessHandler;
@@ -56,10 +56,12 @@ public class WebSecurityConfigJWT extends WebSecurityConfigurerAdapter {
private static final String LOGIN_PATH = "/quartz-manager/api/login";
private static final String LOGOUT_PATH = "/quartz-manager/api/logout";
- @Value("${server.servlet.context-path}")
+ private static final String WEBJAR_PATH = "/quartz-manager-ui";
+
+ @Value("${server.servlet.context-path:/}")
private String contextPath;
- @Value("${app.name}")
+ @Value("${app.name:quartz-manager}")
private String APP_NAME;
@Value("${quartz-manager.security.login-model.form-login-enabled}")
@@ -105,7 +107,7 @@ public class WebSecurityConfigJWT extends WebSecurityConfigurerAdapter {
public void configure(WebSecurity web) throws Exception {
web.ignoring()//
.antMatchers(HttpMethod.GET, PATTERNS_SWAGGER_UI) //
- .antMatchers(HttpMethod.GET,"/css/**", "/js/**", "/img/**", "/lib/**");
+ .antMatchers(HttpMethod.GET, WEBJAR_PATH + "/css/**", WEBJAR_PATH + "/js/**", WEBJAR_PATH + "/img/**", WEBJAR_PATH + "/lib/**", WEBJAR_PATH + "/assets/**");
}
private void configureInMemoryAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/configuration/properties/InMemoryAccountProperties.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/configuration/properties/InMemoryAccountProperties.java
similarity index 89%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/configuration/properties/InMemoryAccountProperties.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/configuration/properties/InMemoryAccountProperties.java
index a6905ba..279a079 100644
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/configuration/properties/InMemoryAccountProperties.java
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/configuration/properties/InMemoryAccountProperties.java
@@ -1,4 +1,4 @@
-package it.fabioformosa.quartzmanager.configuration.properties;
+package it.fabioformosa.quartzmanager.security.configuration.properties;
import lombok.Getter;
import lombok.Setter;
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/configuration/properties/JwtSecurityProperties.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/configuration/properties/JwtSecurityProperties.java
similarity index 90%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/configuration/properties/JwtSecurityProperties.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/configuration/properties/JwtSecurityProperties.java
index e33baba..1afec00 100644
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/configuration/properties/JwtSecurityProperties.java
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/configuration/properties/JwtSecurityProperties.java
@@ -1,4 +1,4 @@
-package it.fabioformosa.quartzmanager.configuration.properties;
+package it.fabioformosa.quartzmanager.security.configuration.properties;
import lombok.Data;
import lombok.Getter;
diff --git a/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/controllers/AuthenticationController.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/controllers/AuthenticationController.java
new file mode 100644
index 0000000..ca02749
--- /dev/null
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/controllers/AuthenticationController.java
@@ -0,0 +1,82 @@
+package it.fabioformosa.quartzmanager.security.controllers;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import it.fabioformosa.quartzmanager.security.helpers.impl.JwtTokenHelper;
+import it.fabioformosa.quartzmanager.security.models.UserTokenState;
+import it.fabioformosa.quartzmanager.security.services.impl.CustomUserDetailsService;
+
+/**
+ * JWT Temporary disabled
+ *
+ * @author Fabio.Formosa
+ *
+ */
+
+//@RestController
+//@RequestMapping( value = "/api", produces = MediaType.APPLICATION_JSON_VALUE )
+public class AuthenticationController {
+
+ static class PasswordChanger {
+ public String oldPassword;
+ public String newPassword;
+ }
+
+ @Autowired
+ private CustomUserDetailsService userDetailsService;
+
+ @Autowired
+ JwtTokenHelper tokenHelper;
+
+ @Value("${quartz-manager.security.jwt.expiration-in-sec}")
+ private int EXPIRES_IN_SEC;
+
+ @Value("${quartz-manager.security.jwt.cookie-strategy-cookie}")
+ private String TOKEN_COOKIE;
+
+ @RequestMapping(value = "/changePassword", method = RequestMethod.POST)
+ @PreAuthorize("hasRole('USER')")
+ public ResponseEntity> changePassword(@RequestBody PasswordChanger passwordChanger) {
+ userDetailsService.changePassword(passwordChanger.oldPassword, passwordChanger.newPassword);
+ Map result = new HashMap<>();
+ result.put( "result", "success" );
+ return ResponseEntity.accepted().body(result);
+ }
+
+ @RequestMapping(value = "/refresh", method = RequestMethod.GET)
+ public ResponseEntity> refreshAuthenticationToken(HttpServletRequest request, HttpServletResponse response) {
+
+ String authToken = tokenHelper.retrieveToken( request );
+ if (authToken != null && tokenHelper.canTokenBeRefreshed(authToken)) {
+ // TODO check user password last update
+ String refreshedToken = tokenHelper.refreshToken(authToken);
+
+ Cookie authCookie = new Cookie( TOKEN_COOKIE, refreshedToken );
+ authCookie.setPath( "/quartz-manager" );
+ authCookie.setHttpOnly( true );
+ authCookie.setMaxAge( EXPIRES_IN_SEC );
+ // Add cookie to response
+ response.addCookie( authCookie );
+
+ UserTokenState userTokenState = new UserTokenState(refreshedToken, EXPIRES_IN_SEC);
+ return ResponseEntity.ok(userTokenState);
+ } else {
+ UserTokenState userTokenState = new UserTokenState();
+ return ResponseEntity.accepted().body(userTokenState);
+ }
+ }
+
+}
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/LoginConfigurer.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/LoginConfigurer.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/LoginConfigurer.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/LoginConfigurer.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AjaxAuthenticationFilter.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AjaxAuthenticationFilter.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AjaxAuthenticationFilter.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AjaxAuthenticationFilter.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AnonAuthentication.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AnonAuthentication.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AnonAuthentication.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AnonAuthentication.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AuthenticationFailureHandler.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AuthenticationFailureHandler.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AuthenticationFailureHandler.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AuthenticationFailureHandler.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AuthenticationSuccessHandler.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AuthenticationSuccessHandler.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AuthenticationSuccessHandler.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/AuthenticationSuccessHandler.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/ComboEntryPoint.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/ComboEntryPoint.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/ComboEntryPoint.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/ComboEntryPoint.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/FormLoginConfig.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/FormLoginConfig.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/FormLoginConfig.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/FormLoginConfig.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationFilter.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationFilter.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationFilter.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationFilter.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationSuccessHandler.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationSuccessHandler.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationSuccessHandler.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationSuccessHandler.java
diff --git a/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationSuccessHandlerImpl.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationSuccessHandlerImpl.java
new file mode 100644
index 0000000..ca5de80
--- /dev/null
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationSuccessHandlerImpl.java
@@ -0,0 +1,78 @@
+package it.fabioformosa.quartzmanager.security.helpers.impl;
+
+import java.io.IOException;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletResponse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.userdetails.User;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import it.fabioformosa.quartzmanager.security.configuration.properties.JwtSecurityProperties;
+import it.fabioformosa.quartzmanager.security.models.UserTokenState;
+
+/**
+ * It depends on @JwtTokenHelper to generate the jwtToken.
+ * On login success, it generates the jwtToken and it returns it to the login according to possible strategies: cookie, response header.
+ * You can choice the strategy through @JwtSecurityProperties
+ *
+ */
+public class JwtAuthenticationSuccessHandlerImpl implements JwtAuthenticationSuccessHandler {
+
+ private static final Logger log = LoggerFactory.getLogger(JwtAuthenticationSuccessHandlerImpl.class);
+
+ private final JwtSecurityProperties jwtSecurityProps;
+
+ private final JwtTokenHelper jwtTokenHelper;
+
+ private final ObjectMapper objectMapper;
+
+ private final String contextPath;
+
+ @Autowired
+ public JwtAuthenticationSuccessHandlerImpl(String contextPath, JwtSecurityProperties jwtSecurityProps, JwtTokenHelper jwtTokenHelper, ObjectMapper objectMapper) {
+ this.contextPath = contextPath;
+ this.jwtSecurityProps = jwtSecurityProps;
+ this.jwtTokenHelper = jwtTokenHelper;
+ this.objectMapper = objectMapper;
+ }
+
+ @Override
+ public String cookieMustBeDeletedAtLogout() {
+ if(!jwtSecurityProps.getCookieStrategy().isEnabled())
+ return null;
+ return jwtSecurityProps.getCookieStrategy().getCookie();
+ }
+
+ @Override
+ public void onLoginSuccess(Authentication authentication, HttpServletResponse response) throws IOException {
+ log.debug("Login successed, generating jwtToken...");
+
+ User user = (User) authentication.getPrincipal();
+ String jwtToken = jwtTokenHelper.generateToken(user.getUsername());
+
+ if(jwtSecurityProps.getCookieStrategy().isEnabled()) {
+ Cookie authCookie = new Cookie(jwtSecurityProps.getCookieStrategy().getCookie(), jwtToken);
+ authCookie.setHttpOnly(true);
+ authCookie.setMaxAge((int) jwtSecurityProps.getExpirationInSec());
+ authCookie.setPath(contextPath);
+ response.addCookie(authCookie);
+ log.debug("Set jwtToken into the cookie {}", jwtSecurityProps.getCookieStrategy().getCookie());
+ }
+
+ if(jwtSecurityProps.getHeaderStrategy().isEnabled()) {
+ jwtTokenHelper.setHeader(response, jwtToken);
+ log.debug("Set jwtToken into the response header {}", jwtSecurityProps.getHeaderStrategy().getHeader());
+ }
+
+ UserTokenState userTokenState = new UserTokenState(jwtToken, jwtSecurityProps.getExpirationInSec());
+ String jwtResponse = objectMapper.writeValueAsString(userTokenState);
+ response.setContentType("application/json");
+ response.getWriter().write(jwtResponse);
+ }
+}
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenAuthenticationFilter.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenAuthenticationFilter.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenAuthenticationFilter.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenAuthenticationFilter.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenBasedAuthentication.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenBasedAuthentication.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenBasedAuthentication.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenBasedAuthentication.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java
similarity index 98%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java
index a4bc953..679eb57 100644
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java
@@ -17,7 +17,7 @@ import org.slf4j.LoggerFactory;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
-import it.fabioformosa.quartzmanager.configuration.properties.JwtSecurityProperties;
+import it.fabioformosa.quartzmanager.security.configuration.properties.JwtSecurityProperties;
/**
*
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtUsernamePasswordFiterLoginConfig.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtUsernamePasswordFiterLoginConfig.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtUsernamePasswordFiterLoginConfig.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtUsernamePasswordFiterLoginConfig.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/LogoutSuccess.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/LogoutSuccess.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/LogoutSuccess.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/LogoutSuccess.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/QuartzManagerHttpSecurity.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/QuartzManagerHttpSecurity.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/QuartzManagerHttpSecurity.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/QuartzManagerHttpSecurity.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/RESTRequestMatcher.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/RESTRequestMatcher.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/RESTRequestMatcher.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/RESTRequestMatcher.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/RestAuthenticationEntryPoint.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/RestAuthenticationEntryPoint.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/RestAuthenticationEntryPoint.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/RestAuthenticationEntryPoint.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/WebsocketRequestMatcher.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/WebsocketRequestMatcher.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/WebsocketRequestMatcher.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/WebsocketRequestMatcher.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/model/Authority.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/models/Authority.java
similarity index 93%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/model/Authority.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/models/Authority.java
index f259933..32a6284 100644
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/model/Authority.java
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/models/Authority.java
@@ -1,4 +1,4 @@
-package it.fabioformosa.quartzmanager.security.model;
+package it.fabioformosa.quartzmanager.security.models;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/model/User.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/models/User.java
similarity index 97%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/model/User.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/models/User.java
index a8d2c41..ba0d58a 100644
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/model/User.java
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/models/User.java
@@ -1,4 +1,4 @@
-package it.fabioformosa.quartzmanager.security.model;
+package it.fabioformosa.quartzmanager.security.models;
import java.io.Serializable;
import java.util.Collection;
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/model/UserRequest.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/models/UserRequest.java
similarity index 93%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/model/UserRequest.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/models/UserRequest.java
index f89e4fd..469df73 100644
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/model/UserRequest.java
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/models/UserRequest.java
@@ -1,4 +1,4 @@
-package it.fabioformosa.quartzmanager.security.model;
+package it.fabioformosa.quartzmanager.security.models;
public class UserRequest {
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/model/UserTokenState.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/models/UserTokenState.java
similarity index 88%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/model/UserTokenState.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/models/UserTokenState.java
index 39fb1b0..e39cd6b 100644
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/model/UserTokenState.java
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/models/UserTokenState.java
@@ -1,4 +1,4 @@
-package it.fabioformosa.quartzmanager.security.model;
+package it.fabioformosa.quartzmanager.security.models;
public class UserTokenState {
private String access_token;
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/repository/AuthorityRepository.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/repositories/AuthorityRepository.java
similarity index 78%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/repository/AuthorityRepository.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/repositories/AuthorityRepository.java
index 4e41786..5d736c1 100644
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/repository/AuthorityRepository.java
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/repositories/AuthorityRepository.java
@@ -1,4 +1,4 @@
-package it.fabioformosa.quartzmanager.security.repository;
+package it.fabioformosa.quartzmanager.security.repositories;
/**
* Temporary disabled
diff --git a/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/repositories/UserRepository.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/repositories/UserRepository.java
new file mode 100644
index 0000000..6ae1804
--- /dev/null
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/repositories/UserRepository.java
@@ -0,0 +1,11 @@
+package it.fabioformosa.quartzmanager.security.repositories;
+
+import it.fabioformosa.quartzmanager.security.models.User;
+
+public interface UserRepository {
+ User findByUsername( String username );
+}
+//public interface UserRepository extends JpaRepository {
+// User findByUsername( String username );
+//}
+
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/AuthorityService.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/AuthorityService.java
similarity index 75%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/AuthorityService.java
rename to quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/AuthorityService.java
index f2d320c..5eca666 100644
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/AuthorityService.java
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/AuthorityService.java
@@ -1,4 +1,4 @@
-package it.fabioformosa.quartzmanager.security.service;
+package it.fabioformosa.quartzmanager.security.services;
/**
* temporary disabled
diff --git a/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/UserService.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/UserService.java
new file mode 100644
index 0000000..5b66879
--- /dev/null
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/UserService.java
@@ -0,0 +1,18 @@
+package it.fabioformosa.quartzmanager.security.services;
+
+import java.util.List;
+
+import it.fabioformosa.quartzmanager.security.models.User;
+import it.fabioformosa.quartzmanager.security.models.UserRequest;
+
+public interface UserService {
+ List findAll();
+
+ User findById(Long id);
+
+ User findByUsername(String username);
+
+ void resetCredentials();
+
+ User save(UserRequest user);
+}
diff --git a/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/impl/AuthorityServiceImpl.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/impl/AuthorityServiceImpl.java
new file mode 100644
index 0000000..78ebaf4
--- /dev/null
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/impl/AuthorityServiceImpl.java
@@ -0,0 +1,33 @@
+package it.fabioformosa.quartzmanager.security.services.impl;
+
+import it.fabioformosa.quartzmanager.security.services.AuthorityService;
+
+/**
+ * Temporary disabled
+ * @author Fabio
+ *
+ */
+
+//@Service
+public class AuthorityServiceImpl implements AuthorityService {
+
+ // @Autowired
+ // private AuthorityRepository authorityRepository;
+ //
+ // @Override
+ // public List findById(Long id) {
+ // Authority auth = this.authorityRepository.getOne(id);
+ // List auths = new ArrayList<>();
+ // auths.add(auth);
+ // return auths;
+ // }
+ //
+ // @Override
+ // public List findByname(String name) {
+ // Authority auth = this.authorityRepository.findByName(name);
+ // List auths = new ArrayList<>();
+ // auths.add(auth);
+ // return auths;
+ // }
+
+}
diff --git a/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/impl/CustomUserDetailsService.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/impl/CustomUserDetailsService.java
new file mode 100644
index 0000000..f4b7adc
--- /dev/null
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/impl/CustomUserDetailsService.java
@@ -0,0 +1,67 @@
+package it.fabioformosa.quartzmanager.security.services.impl;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+import it.fabioformosa.quartzmanager.security.models.User;
+import it.fabioformosa.quartzmanager.security.repositories.UserRepository;
+
+/**
+ * Temporary disabled
+ * @author Fabio
+ *
+ */
+//@Service
+public class CustomUserDetailsService implements UserDetailsService {
+
+ protected final Log LOGGER = LogFactory.getLog(getClass());
+
+ @Autowired
+ private UserRepository userRepository;
+
+ @Autowired
+ private PasswordEncoder passwordEncoder;
+
+ @Autowired
+ private AuthenticationManager authenticationManager;
+
+ public void changePassword(String oldPassword, String newPassword) {
+
+ // Authentication currentUser = SecurityContextHolder.getContext().getAuthentication();
+ // String username = currentUser.getName();
+ //
+ // if (authenticationManager != null) {
+ // LOGGER.debug("Re-authenticating user '"+ username + "' for password change request.");
+ //
+ // authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, oldPassword));
+ // } else {
+ // LOGGER.debug("No authentication manager set. can't change Password!");
+ //
+ // return;
+ // }
+ //
+ // LOGGER.debug("Changing password for user '"+ username + "'");
+ //
+ // User user = (User) loadUserByUsername(username);
+ //
+ // user.setPassword(passwordEncoder.encode(newPassword));
+ // userRepository.save(user);
+
+ }
+
+ @Override
+ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ User user = userRepository.findByUsername(username);
+ if (user == null)
+ throw new UsernameNotFoundException(String.format("No user found with username '%s'.", username));
+ else
+ return user;
+ }
+
+}
diff --git a/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/impl/UserServiceImpl.java b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/impl/UserServiceImpl.java
new file mode 100644
index 0000000..9831e6e
--- /dev/null
+++ b/quartz-manager-parent/quartz-manager-security/src/main/java/it/fabioformosa/quartzmanager/security/services/impl/UserServiceImpl.java
@@ -0,0 +1,79 @@
+package it.fabioformosa.quartzmanager.security.services.impl;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.AccessDeniedException;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+import it.fabioformosa.quartzmanager.security.models.User;
+import it.fabioformosa.quartzmanager.security.models.UserRequest;
+import it.fabioformosa.quartzmanager.security.repositories.UserRepository;
+import it.fabioformosa.quartzmanager.security.services.AuthorityService;
+import it.fabioformosa.quartzmanager.security.services.UserService;
+
+/**
+ * Temporary disabled
+ * @author Fabio
+ *
+ */
+//@Service
+public class UserServiceImpl implements UserService {
+
+ @Autowired
+ private UserRepository userRepository;
+
+ @Autowired
+ private PasswordEncoder passwordEncoder;
+
+ @Autowired
+ private AuthorityService authService;
+
+ @Override
+ @PreAuthorize("hasRole('ADMIN')")
+ public List findAll() throws AccessDeniedException {
+ // List result = userRepository.findAll();
+ // return result;
+ return null;
+ }
+
+ @Override
+ @PreAuthorize("hasRole('ADMIN')")
+ public User findById(Long id) throws AccessDeniedException {
+ // User u = userRepository.getOne(id);
+ // return u;
+ return null;
+ }
+
+ @Override
+ // @PreAuthorize("hasRole('USER')")
+ public User findByUsername(String username) throws UsernameNotFoundException {
+ User u = userRepository.findByUsername(username);
+ return u;
+ }
+
+ @Override
+ public void resetCredentials() {
+ // List users = userRepository.findAll();
+ // for (User user : users) {
+ // user.setPassword(passwordEncoder.encode("123"));
+ // userRepository.save(user);
+ // }
+ }
+
+ @Override
+ public User save(UserRequest userRequest) {
+ User user = new User();
+ // user.setUsername(userRequest.getUsername());
+ // user.setPassword(passwordEncoder.encode(userRequest.getPassword()));
+ // user.setFirstname(userRequest.getFirstname());
+ // user.setLastname(userRequest.getLastname());
+ // List auth = authService.findByname("ROLE_USER");
+ // user.setAuthorities(auth);
+ // this.userRepository.save(user);
+ return user;
+ }
+
+}
diff --git a/quartz-manager-parent/quartz-manager-security/src/main/resources/META-INF/spring.factories b/quartz-manager-parent/quartz-manager-security/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..9e6be3c
--- /dev/null
+++ b/quartz-manager-parent/quartz-manager-security/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,4 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+it.fabioformosa.quartzmanager.security.configuration.WebSecurityConfigJWT,\
+it.fabioformosa.quartzmanager.security.configuration.properties.JwtSecurityProperties,\
+it.fabioformosa.quartzmanager.security.configuration.properties.InMemoryAccountProperties
\ No newline at end of file
diff --git a/quartz-manager-parent/quartz-manager-ui-webjar/pom.xml b/quartz-manager-parent/quartz-manager-ui-webjar/pom.xml
new file mode 100644
index 0000000..68aeee1
--- /dev/null
+++ b/quartz-manager-parent/quartz-manager-ui-webjar/pom.xml
@@ -0,0 +1,139 @@
+
+
+ 4.0.0
+
+ it.fabioformosa.quartz-manager
+ quartz-manager-parent
+ 2.2.2-SNAPSHOT
+
+
+ quartz-manager-ui-webjar
+
+ Quartz Manager UI webjar
+ webjar builder for quartz-manager frontend
+
+ https://github.com/fabioformosa/quartz-manager
+
+ ${basedir}/../..
+ UTF-8
+ UTF-8
+ 1.8
+ quartz-manager-frontend
+ v10.16.3
+ 6.9.0
+
+
+
+
+
+
+
+ build-webjar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 2.6
+
+
+ copy-resources
+ generate-resources
+
+ copy-resources
+
+
+ ${basedir}/target/tmp
+
+
+ ../../${frontend.folderName}
+
+ static/**
+ dist/**
+ node_modules/**
+
+
+
+
+
+
+
+
+
+
+ com.github.eirslett
+ frontend-maven-plugin
+ 1.11.0
+
+ target/tmp
+
+
+
+
+ install node and npm
+
+ install-node-and-npm
+
+ generate-resources
+
+ ${node.version}
+ ${npm.version}
+
+
+
+
+ npm install
+
+ npm
+
+ process-resources
+
+ install
+
+
+
+
+ npm run build
+
+ npm
+
+ process-resources
+
+ run build
+
+
+
+
+
+
+
+
+ maven-antrun-plugin
+ 1.8
+
+
+ clean build files
+ process-resources
+
+
+
+
+
+
+
+
+
+
+ run
+
+
+
+
+
+
+
+
+
+
diff --git a/quartz-manager-parent/quartz-manager-web/.gitignore b/quartz-manager-parent/quartz-manager-web-showcase/.gitignore
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/.gitignore
rename to quartz-manager-parent/quartz-manager-web-showcase/.gitignore
diff --git a/quartz-manager-parent/quartz-manager-web/pom.xml b/quartz-manager-parent/quartz-manager-web-showcase/pom.xml
similarity index 88%
rename from quartz-manager-parent/quartz-manager-web/pom.xml
rename to quartz-manager-parent/quartz-manager-web-showcase/pom.xml
index d651cd5..654e9e4 100644
--- a/quartz-manager-parent/quartz-manager-web/pom.xml
+++ b/quartz-manager-parent/quartz-manager-web-showcase/pom.xml
@@ -9,12 +9,12 @@
2.2.2-SNAPSHOT
- quartz-manager-web
+ quartz-manager-web-showcase
war
- Quartz Manager Web
- A webapp that imports Quartz Manager API lib
+ Quartz Manager Web Showcase
+ A webapp that imports Quartz Manager API lib and the frontend webjar
UTF-8
@@ -28,6 +28,14 @@
it.fabioformosa.quartz-manager
quartz-manager-api
+
+ it.fabioformosa.quartz-manager
+ quartz-manager-ui-webjar
+
+
+ it.fabioformosa.quartz-manager
+ quartz-manager-security
+
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/QuartManagerApplication.java b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/QuartManagerApplication.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/QuartManagerApplication.java
rename to quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/QuartManagerApplication.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/ServletInitializer.java b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/ServletInitializer.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/ServletInitializer.java
rename to quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/ServletInitializer.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/controllers/QuartzManagerController.java b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/controllers/QuartzManagerController.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/controllers/QuartzManagerController.java
rename to quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/controllers/QuartzManagerController.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/controllers/SessionController.java b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/controllers/SessionController.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/controllers/SessionController.java
rename to quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/controllers/SessionController.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/jobs/myjobs/SampleJob.java b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/myjobs/SampleJob.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/jobs/myjobs/SampleJob.java
rename to quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/myjobs/SampleJob.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java
rename to quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/resources/_disabled_import.sql_off b/quartz-manager-parent/quartz-manager-web-showcase/src/main/resources/_disabled_import.sql_off
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/resources/_disabled_import.sql_off
rename to quartz-manager-parent/quartz-manager-web-showcase/src/main/resources/_disabled_import.sql_off
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/resources/application.yml b/quartz-manager-parent/quartz-manager-web-showcase/src/main/resources/application.yml
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/resources/application.yml
rename to quartz-manager-parent/quartz-manager-web-showcase/src/main/resources/application.yml
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/resources/banner.txt b/quartz-manager-parent/quartz-manager-web-showcase/src/main/resources/banner.txt
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/resources/banner.txt
rename to quartz-manager-parent/quartz-manager-web-showcase/src/main/resources/banner.txt
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/resources/logback.xml b/quartz-manager-parent/quartz-manager-web-showcase/src/main/resources/logback.xml
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/resources/logback.xml
rename to quartz-manager-parent/quartz-manager-web-showcase/src/main/resources/logback.xml
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/resources/quartz-manager-2-screenshot_800.PNG b/quartz-manager-parent/quartz-manager-web-showcase/src/main/resources/quartz-manager-2-screenshot_800.PNG
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/resources/quartz-manager-2-screenshot_800.PNG
rename to quartz-manager-parent/quartz-manager-web-showcase/src/main/resources/quartz-manager-2-screenshot_800.PNG
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/resources/quartz.properties b/quartz-manager-parent/quartz-manager-web-showcase/src/main/resources/quartz.properties
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/main/resources/quartz.properties
rename to quartz-manager-parent/quartz-manager-web-showcase/src/main/resources/quartz.properties
diff --git a/quartz-manager-parent/quartz-manager-web/src/test/java/it/fabioformosa/QuartManagerApplicationTests.java b/quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/QuartManagerApplicationTests.java
similarity index 100%
rename from quartz-manager-parent/quartz-manager-web/src/test/java/it/fabioformosa/QuartManagerApplicationTests.java
rename to quartz-manager-parent/quartz-manager-web-showcase/src/test/java/it/fabioformosa/QuartManagerApplicationTests.java
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/controllers/AuthenticationController.java b/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/controllers/AuthenticationController.java
deleted file mode 100644
index 4b0d704..0000000
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/controllers/AuthenticationController.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package it.fabioformosa.quartzmanager.controllers;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.ResponseEntity;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-
-import it.fabioformosa.quartzmanager.security.helpers.impl.JwtTokenHelper;
-import it.fabioformosa.quartzmanager.security.model.UserTokenState;
-import it.fabioformosa.quartzmanager.security.service.impl.CustomUserDetailsService;
-
-/**
- * JWT Temporary disabled
- *
- * @author Fabio.Formosa
- *
- */
-
-//@RestController
-//@RequestMapping( value = "/api", produces = MediaType.APPLICATION_JSON_VALUE )
-public class AuthenticationController {
-
- static class PasswordChanger {
- public String oldPassword;
- public String newPassword;
- }
-
- @Autowired
- private CustomUserDetailsService userDetailsService;
-
- @Autowired
- JwtTokenHelper tokenHelper;
-
- @Value("${quartz-manager.security.jwt.expiration-in-sec}")
- private int EXPIRES_IN_SEC;
-
- @Value("${quartz-manager.security.jwt.cookie-strategy-cookie}")
- private String TOKEN_COOKIE;
-
- @RequestMapping(value = "/changePassword", method = RequestMethod.POST)
- @PreAuthorize("hasRole('USER')")
- public ResponseEntity> changePassword(@RequestBody PasswordChanger passwordChanger) {
- userDetailsService.changePassword(passwordChanger.oldPassword, passwordChanger.newPassword);
- Map result = new HashMap<>();
- result.put( "result", "success" );
- return ResponseEntity.accepted().body(result);
- }
-
- @RequestMapping(value = "/refresh", method = RequestMethod.GET)
- public ResponseEntity> refreshAuthenticationToken(HttpServletRequest request, HttpServletResponse response) {
-
- String authToken = tokenHelper.retrieveToken( request );
- if (authToken != null && tokenHelper.canTokenBeRefreshed(authToken)) {
- // TODO check user password last update
- String refreshedToken = tokenHelper.refreshToken(authToken);
-
- Cookie authCookie = new Cookie( TOKEN_COOKIE, refreshedToken );
- authCookie.setPath( "/quartz-manager" );
- authCookie.setHttpOnly( true );
- authCookie.setMaxAge( EXPIRES_IN_SEC );
- // Add cookie to response
- response.addCookie( authCookie );
-
- UserTokenState userTokenState = new UserTokenState(refreshedToken, EXPIRES_IN_SEC);
- return ResponseEntity.ok(userTokenState);
- } else {
- UserTokenState userTokenState = new UserTokenState();
- return ResponseEntity.accepted().body(userTokenState);
- }
- }
-
-}
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationSuccessHandlerImpl.java b/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationSuccessHandlerImpl.java
deleted file mode 100644
index fee0ede..0000000
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtAuthenticationSuccessHandlerImpl.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package it.fabioformosa.quartzmanager.security.helpers.impl;
-
-import java.io.IOException;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.userdetails.User;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import it.fabioformosa.quartzmanager.configuration.properties.JwtSecurityProperties;
-import it.fabioformosa.quartzmanager.security.model.UserTokenState;
-
-/**
- * It depends on @JwtTokenHelper to generate the jwtToken.
- * On login success, it generates the jwtToken and it returns it to the login according to possible strategies: cookie, response header.
- * You can choice the strategy through @JwtSecurityProperties
- *
- */
-public class JwtAuthenticationSuccessHandlerImpl implements JwtAuthenticationSuccessHandler {
-
- private static final Logger log = LoggerFactory.getLogger(JwtAuthenticationSuccessHandlerImpl.class);
-
- private final JwtSecurityProperties jwtSecurityProps;
-
- private final JwtTokenHelper jwtTokenHelper;
-
- private final ObjectMapper objectMapper;
-
- private final String contextPath;
-
- @Autowired
- public JwtAuthenticationSuccessHandlerImpl(String contextPath, JwtSecurityProperties jwtSecurityProps, JwtTokenHelper jwtTokenHelper, ObjectMapper objectMapper) {
- this.contextPath = contextPath;
- this.jwtSecurityProps = jwtSecurityProps;
- this.jwtTokenHelper = jwtTokenHelper;
- this.objectMapper = objectMapper;
- }
-
- @Override
- public String cookieMustBeDeletedAtLogout() {
- if(!jwtSecurityProps.getCookieStrategy().isEnabled())
- return null;
- return jwtSecurityProps.getCookieStrategy().getCookie();
- }
-
- @Override
- public void onLoginSuccess(Authentication authentication, HttpServletResponse response) throws IOException {
- log.debug("Login successed, generating jwtToken...");
-
- User user = (User) authentication.getPrincipal();
- String jwtToken = jwtTokenHelper.generateToken(user.getUsername());
-
- if(jwtSecurityProps.getCookieStrategy().isEnabled()) {
- Cookie authCookie = new Cookie(jwtSecurityProps.getCookieStrategy().getCookie(), jwtToken);
- authCookie.setHttpOnly(true);
- authCookie.setMaxAge((int) jwtSecurityProps.getExpirationInSec());
- authCookie.setPath(contextPath);
- response.addCookie(authCookie);
- log.debug("Set jwtToken into the cookie {}", jwtSecurityProps.getCookieStrategy().getCookie());
- }
-
- if(jwtSecurityProps.getHeaderStrategy().isEnabled()) {
- jwtTokenHelper.setHeader(response, jwtToken);
- log.debug("Set jwtToken into the response header {}", jwtSecurityProps.getHeaderStrategy().getHeader());
- }
-
- UserTokenState userTokenState = new UserTokenState(jwtToken, jwtSecurityProps.getExpirationInSec());
- String jwtResponse = objectMapper.writeValueAsString(userTokenState);
- response.setContentType("application/json");
- response.getWriter().write(jwtResponse);
- }
-}
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/repository/UserRepository.java b/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/repository/UserRepository.java
deleted file mode 100644
index 755d323..0000000
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/repository/UserRepository.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package it.fabioformosa.quartzmanager.security.repository;
-
-import it.fabioformosa.quartzmanager.security.model.User;
-
-public interface UserRepository {
- User findByUsername( String username );
-}
-//public interface UserRepository extends JpaRepository {
-// User findByUsername( String username );
-//}
-
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/UserService.java b/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/UserService.java
deleted file mode 100644
index 76dc45c..0000000
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/UserService.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package it.fabioformosa.quartzmanager.security.service;
-
-import java.util.List;
-
-import it.fabioformosa.quartzmanager.security.model.User;
-import it.fabioformosa.quartzmanager.security.model.UserRequest;
-
-public interface UserService {
- List findAll();
-
- User findById(Long id);
-
- User findByUsername(String username);
-
- void resetCredentials();
-
- User save(UserRequest user);
-}
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/impl/AuthorityServiceImpl.java b/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/impl/AuthorityServiceImpl.java
deleted file mode 100644
index 8faff51..0000000
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/impl/AuthorityServiceImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package it.fabioformosa.quartzmanager.security.service.impl;
-
-import it.fabioformosa.quartzmanager.security.service.AuthorityService;
-
-/**
- * Temporary disabled
- * @author Fabio
- *
- */
-
-//@Service
-public class AuthorityServiceImpl implements AuthorityService {
-
- // @Autowired
- // private AuthorityRepository authorityRepository;
- //
- // @Override
- // public List findById(Long id) {
- // Authority auth = this.authorityRepository.getOne(id);
- // List auths = new ArrayList<>();
- // auths.add(auth);
- // return auths;
- // }
- //
- // @Override
- // public List findByname(String name) {
- // Authority auth = this.authorityRepository.findByName(name);
- // List auths = new ArrayList<>();
- // auths.add(auth);
- // return auths;
- // }
-
-}
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/impl/CustomUserDetailsService.java b/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/impl/CustomUserDetailsService.java
deleted file mode 100644
index cb8ef9e..0000000
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/impl/CustomUserDetailsService.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package it.fabioformosa.quartzmanager.security.service.impl;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-import it.fabioformosa.quartzmanager.security.model.User;
-import it.fabioformosa.quartzmanager.security.repository.UserRepository;
-
-/**
- * Temporary disabled
- * @author Fabio
- *
- */
-//@Service
-public class CustomUserDetailsService implements UserDetailsService {
-
- protected final Log LOGGER = LogFactory.getLog(getClass());
-
- @Autowired
- private UserRepository userRepository;
-
- @Autowired
- private PasswordEncoder passwordEncoder;
-
- @Autowired
- private AuthenticationManager authenticationManager;
-
- public void changePassword(String oldPassword, String newPassword) {
-
- // Authentication currentUser = SecurityContextHolder.getContext().getAuthentication();
- // String username = currentUser.getName();
- //
- // if (authenticationManager != null) {
- // LOGGER.debug("Re-authenticating user '"+ username + "' for password change request.");
- //
- // authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, oldPassword));
- // } else {
- // LOGGER.debug("No authentication manager set. can't change Password!");
- //
- // return;
- // }
- //
- // LOGGER.debug("Changing password for user '"+ username + "'");
- //
- // User user = (User) loadUserByUsername(username);
- //
- // user.setPassword(passwordEncoder.encode(newPassword));
- // userRepository.save(user);
-
- }
-
- @Override
- public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
- User user = userRepository.findByUsername(username);
- if (user == null)
- throw new UsernameNotFoundException(String.format("No user found with username '%s'.", username));
- else
- return user;
- }
-
-}
diff --git a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/impl/UserServiceImpl.java b/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/impl/UserServiceImpl.java
deleted file mode 100644
index 0e2a90c..0000000
--- a/quartz-manager-parent/quartz-manager-web/src/main/java/it/fabioformosa/quartzmanager/security/service/impl/UserServiceImpl.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package it.fabioformosa.quartzmanager.security.service.impl;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.AccessDeniedException;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-import it.fabioformosa.quartzmanager.security.model.User;
-import it.fabioformosa.quartzmanager.security.model.UserRequest;
-import it.fabioformosa.quartzmanager.security.repository.UserRepository;
-import it.fabioformosa.quartzmanager.security.service.AuthorityService;
-import it.fabioformosa.quartzmanager.security.service.UserService;
-
-/**
- * Temporary disabled
- * @author Fabio
- *
- */
-//@Service
-public class UserServiceImpl implements UserService {
-
- @Autowired
- private UserRepository userRepository;
-
- @Autowired
- private PasswordEncoder passwordEncoder;
-
- @Autowired
- private AuthorityService authService;
-
- @Override
- @PreAuthorize("hasRole('ADMIN')")
- public List findAll() throws AccessDeniedException {
- // List result = userRepository.findAll();
- // return result;
- return null;
- }
-
- @Override
- @PreAuthorize("hasRole('ADMIN')")
- public User findById(Long id) throws AccessDeniedException {
- // User u = userRepository.getOne(id);
- // return u;
- return null;
- }
-
- @Override
- // @PreAuthorize("hasRole('USER')")
- public User findByUsername(String username) throws UsernameNotFoundException {
- User u = userRepository.findByUsername(username);
- return u;
- }
-
- @Override
- public void resetCredentials() {
- // List users = userRepository.findAll();
- // for (User user : users) {
- // user.setPassword(passwordEncoder.encode("123"));
- // userRepository.save(user);
- // }
- }
-
- @Override
- public User save(UserRequest userRequest) {
- User user = new User();
- // user.setUsername(userRequest.getUsername());
- // user.setPassword(passwordEncoder.encode(userRequest.getPassword()));
- // user.setFirstname(userRequest.getFirstname());
- // user.setLastname(userRequest.getLastname());
- // List auth = authService.findByname("ROLE_USER");
- // user.setAuthorities(auth);
- // this.userRepository.save(user);
- return user;
- }
-
-}