Skip to content

Commit 6ed0697

Browse files
Refactor password validation and token repository and add swagger config
1 parent e4004c7 commit 6ed0697

File tree

9 files changed

+80
-22
lines changed

9 files changed

+80
-22
lines changed

pom.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<log4j.version>1.2.17</log4j.version>
2727
<spring.boot.version>2.0.4.RELEASE</spring.boot.version>
2828
<freemarker.version>2.3.28</freemarker.version>
29+
<swagger.version>2.9.2</swagger.version>
2930
</properties>
3031

3132
<dependencies>
@@ -114,6 +115,21 @@
114115
<artifactId>freemarker</artifactId>
115116
<version>${freemarker.version}</version>
116117
</dependency>
118+
119+
<!--Swagger UI-->
120+
<dependency>
121+
<groupId>io.springfox</groupId>
122+
<artifactId>springfox-swagger-ui</artifactId>
123+
<version>${swagger.version}</version>
124+
</dependency>
125+
126+
<!--Swagger 2-->
127+
<dependency>
128+
<groupId>io.springfox</groupId>
129+
<artifactId>springfox-swagger2</artifactId>
130+
<version>${swagger.version}</version>
131+
</dependency>
132+
117133
</dependencies>
118134

119135
<build>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.accolite.pru.health.AuthApp.config;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import springfox.documentation.builders.ApiInfoBuilder;
6+
import springfox.documentation.builders.PathSelectors;
7+
import springfox.documentation.builders.RequestHandlerSelectors;
8+
import springfox.documentation.service.ApiInfo;
9+
import springfox.documentation.spi.DocumentationType;
10+
import springfox.documentation.spring.web.plugins.Docket;
11+
import springfox.documentation.swagger2.annotations.EnableSwagger2;
12+
13+
@EnableSwagger2
14+
@Configuration
15+
public class SwaggerConfig {
16+
17+
@Bean
18+
public Docket productApi() {
19+
return new Docket(DocumentationType.SWAGGER_2)
20+
.select()
21+
.apis(RequestHandlerSelectors.basePackage("com.accolite.pru.health.AuthApp"))
22+
.paths(PathSelectors.regex("/api.*"))
23+
.build()
24+
.apiInfo(metaInfo());
25+
}
26+
27+
/**
28+
* Return the meta info about the API. This should reflect
29+
*/
30+
private ApiInfo metaInfo() {
31+
return new ApiInfoBuilder()
32+
.description("Backend API For the Auth/User Service")
33+
.title("Auth/User API")
34+
.version("Unreleased [WIP]")
35+
.build();
36+
}
37+
38+
}

src/main/java/com/accolite/pru/health/AuthApp/config/WebSecurityConfig.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
1414
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
1515
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
16+
import org.springframework.security.config.annotation.web.builders.WebSecurity;
1617
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
1718
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
1819
import org.springframework.security.config.http.SessionCreationPolicy;
@@ -55,6 +56,12 @@ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
5556
.passwordEncoder(passwordEncoder());
5657
}
5758

59+
@Override
60+
public void configure(WebSecurity web) throws Exception {
61+
web.ignoring().antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources/**", "/configuration/**",
62+
"/swagger-ui.html", "/webjars/**");
63+
}
64+
5865
@Override
5966
protected void configure(HttpSecurity http) throws Exception {
6067
http.cors()

src/main/java/com/accolite/pru/health/AuthApp/controller/AuthController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.accolite.pru.health.AuthApp.model.token.RefreshToken;
2525
import com.accolite.pru.health.AuthApp.security.JwtTokenProvider;
2626
import com.accolite.pru.health.AuthApp.service.AuthService;
27+
import io.swagger.annotations.Api;
2728
import org.apache.log4j.Logger;
2829
import org.springframework.beans.factory.annotation.Autowired;
2930
import org.springframework.context.ApplicationEventPublisher;
@@ -45,6 +46,7 @@
4546

4647
@RestController
4748
@RequestMapping("/api/auth")
49+
@Api
4850
public class AuthController {
4951

5052
@Autowired

src/main/java/com/accolite/pru/health/AuthApp/model/payload/PasswordResetRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.accolite.pru.health.AuthApp.model.payload;
22

3-
import com.accolite.pru.health.AuthApp.validation.annotation.PasswordsMatch;
3+
import com.accolite.pru.health.AuthApp.validation.annotation.MatchPassword;
44

55
import javax.validation.constraints.NotBlank;
66

7-
@PasswordsMatch(allowNull = false)
7+
@MatchPassword
88
public class PasswordResetRequest {
99

1010
@NotBlank(message = "Password cannot be blank")
Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,21 @@
11
package com.accolite.pru.health.AuthApp.repository;
22

3-
import java.time.Instant;
4-
import java.util.Optional;
5-
3+
import com.accolite.pru.health.AuthApp.model.PasswordResetToken;
4+
import com.accolite.pru.health.AuthApp.model.User;
65
import org.springframework.data.jpa.repository.JpaRepository;
7-
import org.springframework.data.jpa.repository.Query;
8-
import org.springframework.data.repository.query.Param;
96
import org.springframework.stereotype.Repository;
107

11-
import com.accolite.pru.health.AuthApp.model.PasswordResetToken;
8+
import java.time.Instant;
9+
import java.util.Optional;
1210

1311
@Repository
1412
public interface PasswordResetTokenRepository extends JpaRepository<PasswordResetToken, Long> {
1513

16-
@Query(value = "SELECT t.expiry_time FROM password_reset_token t where t.token_name = :token", nativeQuery = true)
17-
Instant findExpiryTimeByToken(@Param("token") String token);
14+
Optional<Instant> findExpiryDateByToken(String token);
1815

1916
Boolean existsByToken(String token);
2017

21-
@Query(value = "SELECT t.user_id FROM password_reset_token t where t.token_name = :token", nativeQuery = true)
22-
Long findUserIdByToken(@Param("token") String token);
18+
Optional<User> findUserByToken(String token);
2319

24-
@Query(value = "select * from password_reset_token t where t.token_name = :token", nativeQuery = true)
25-
Optional<PasswordResetToken> findByToken(@Param("token") String token);
20+
Optional<PasswordResetToken> findByToken(String token);
2621
}

src/main/java/com/accolite/pru/health/AuthApp/validation/annotation/PasswordsMatch.java renamed to src/main/java/com/accolite/pru/health/AuthApp/validation/annotation/MatchPassword.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.accolite.pru.health.AuthApp.validation.annotation;
22

3-
import com.accolite.pru.health.AuthApp.validation.validator.PasswordsMatchValidator;
3+
import com.accolite.pru.health.AuthApp.validation.validator.MatchPasswordValidator;
44

55
import javax.validation.Constraint;
66
import javax.validation.Payload;
@@ -13,9 +13,9 @@
1313

1414
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
1515
@Retention(RetentionPolicy.RUNTIME)
16-
@Constraint(validatedBy = PasswordsMatchValidator.class)
16+
@Constraint(validatedBy = MatchPasswordValidator.class)
1717
@Documented
18-
public @interface PasswordsMatch {
18+
public @interface MatchPassword {
1919
String message() default "The new passwords must match";
2020

2121
Class<?>[] groups() default {};

src/main/java/com/accolite/pru/health/AuthApp/validation/validator/PasswordsMatchValidator.java renamed to src/main/java/com/accolite/pru/health/AuthApp/validation/validator/MatchPasswordValidator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package com.accolite.pru.health.AuthApp.validation.validator;
22

33
import com.accolite.pru.health.AuthApp.model.payload.PasswordResetRequest;
4-
import com.accolite.pru.health.AuthApp.validation.annotation.PasswordsMatch;
4+
import com.accolite.pru.health.AuthApp.validation.annotation.MatchPassword;
55

66
import javax.validation.ConstraintValidator;
77
import javax.validation.ConstraintValidatorContext;
88

9-
public class PasswordsMatchValidator implements ConstraintValidator<PasswordsMatch, PasswordResetRequest> {
9+
public class MatchPasswordValidator implements ConstraintValidator<MatchPassword, PasswordResetRequest> {
1010

1111
private Boolean allowNull;
1212

1313
@Override
14-
public void initialize(PasswordsMatch constraintAnnotation) {
14+
public void initialize(MatchPassword constraintAnnotation) {
1515
allowNull = constraintAnnotation.allowNull();
1616
}
1717

src/main/resources/application.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ server.port=9004
55
spring.datasource.driverClassName=com.mysql.jdbc.Driver
66
spring.datasource.url=jdbc:mysql://localhost:3306/login_db
77
spring.datasource.username=root
8-
spring.datasource.password=Ashwin@48
8+
spring.datasource.password=
99
spring.datasource.testWhileIdle=true
1010
spring.datasource.validationQuery=SELECT 1
1111

1212
#JPA properties
13-
spring.jpa.hibernate.ddl-auto=create-drop
13+
spring.jpa.hibernate.ddl-auto=none
1414
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
1515
spring.datasource.initialization-mode=always
1616
spring.jpa.properties.hibernate.format_sql=true

0 commit comments

Comments
 (0)