From 3e1c53b86bb882e2ed155d26815b91e6b4448aab Mon Sep 17 00:00:00 2001 From: Takiguchi Date: Tue, 12 Feb 2019 21:40:44 +0100 Subject: [PATCH] Add signin component. --- .../org/codiki/account/AccountController.java | 4 +- .../org/codiki/account/AccountService.java | 8 +- .../core/security/SecurityConfiguration.java | 8 +- src/main/ts-v7/src/app/app.module.ts | 4 + src/main/ts-v7/src/app/app.routing.ts | 2 + .../src/app/signin/signin.component.html | 76 +++++++++++++++++++ .../ts-v7/src/app/signin/signin.component.ts | 69 +++++++++++++++++ .../ts-v7/src/app/signin/signin.service.ts | 14 ++++ 8 files changed, 176 insertions(+), 9 deletions(-) create mode 100644 src/main/ts-v7/src/app/signin/signin.component.html create mode 100644 src/main/ts-v7/src/app/signin/signin.component.ts create mode 100644 src/main/ts-v7/src/app/signin/signin.service.ts diff --git a/src/main/java/org/codiki/account/AccountController.java b/src/main/java/org/codiki/account/AccountController.java index 9e063b4..8f8eb28 100755 --- a/src/main/java/org/codiki/account/AccountController.java +++ b/src/main/java/org/codiki/account/AccountController.java @@ -76,8 +76,8 @@ public class AccountController { } @PostMapping("/signin") - public UserDTO signin(@RequestBody final UserDTO pUser, final HttpServletResponse pResponse) throws IOException { - return accountService.signin(pUser, pResponse); + public void signin(@RequestBody final User pUser, final HttpServletResponse pResponse) throws IOException { + accountService.signin(pUser, pResponse); } @PutMapping("/") diff --git a/src/main/java/org/codiki/account/AccountService.java b/src/main/java/org/codiki/account/AccountService.java index bc9e72f..baff3d6 100755 --- a/src/main/java/org/codiki/account/AccountService.java +++ b/src/main/java/org/codiki/account/AccountService.java @@ -112,22 +112,20 @@ public class AccountService { return result; } - public UserDTO signin(final UserDTO pUser, final HttpServletResponse pResponse) throws IOException { - User user = new User(); - + public void signin(final User pUser, final HttpServletResponse pResponse) throws IOException { if(pUser.getName() == null || pUser.getEmail() == null || pUser.getPassword() == null || "".equals(pUser.getPassword().trim())) { pResponse.sendError(HttpServletResponse.SC_BAD_REQUEST); } else if(userRepository.findByEmail(pUser.getEmail()).isPresent()) { pResponse.sendError(HttpServletResponse.SC_CONFLICT); } else { + User user = new User(); + user.setName(pUser.getName()); user.setEmail(pUser.getEmail()); user.setPassword(StringUtils.hashPassword(pUser.getPassword())); user.setInscriptionDate(new Date()); userRepository.save(user); } - - return new UserDTO(user); } public void updateUser(final UserDTO pUser, final HttpServletRequest pRequest, diff --git a/src/main/java/org/codiki/core/security/SecurityConfiguration.java b/src/main/java/org/codiki/core/security/SecurityConfiguration.java index 29d1b5f..e9296e0 100755 --- a/src/main/java/org/codiki/core/security/SecurityConfiguration.java +++ b/src/main/java/org/codiki/core/security/SecurityConfiguration.java @@ -36,7 +36,11 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() - .antMatchers("/api/account/login", "/api/account/logout").permitAll() + .antMatchers( + "/api/account/login", + "/api/account/logout", + "/api/account/signin" + ).permitAll() .antMatchers( "/api/images/uploadAvatar", "/api/images/myImages", @@ -50,7 +54,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { "/api/categories/**", "/api/images/**", "/api/posts/**" - ).permitAll() + ).permitAll() .anyRequest().authenticated() .and() // Allow to avoid login form at authentication failure from Angular app diff --git a/src/main/ts-v7/src/app/app.module.ts b/src/main/ts-v7/src/app/app.module.ts index a262bce..72e45c0 100755 --- a/src/main/ts-v7/src/app/app.module.ts +++ b/src/main/ts-v7/src/app/app.module.ts @@ -22,6 +22,7 @@ import { AppComponent } from './app.component'; import { HeaderComponent } from './header/header.component'; import { FooterComponent } from './footer/footer.component'; import { LoginComponent } from './login/login.component'; +import { SigninComponent } from './signin/signin.component'; import { DisconnectionComponent } from './disconnection/disconnection.component'; import { HomeComponent } from './home/home.component'; import { MyPostsComponent } from './posts/myPosts/my-posts.component'; @@ -43,6 +44,7 @@ import { HeaderService } from './header/header.service'; import { AuthService } from './core/services/auth.service'; import { HomeService } from './home/home.service'; import { LoginService } from './login/login.service'; +import { SigninService } from './signin/signin.service'; import { MyPostsService } from './posts/myPosts/my-posts.service'; import { ChangePasswordService } from './account-settings/change-password/change-password.service'; import { ProfilEditionService } from './account-settings/profil-edition/profil-edition.service'; @@ -57,6 +59,7 @@ import { VersionRevisionService } from './version-revisions/version-revisions.se HeaderComponent, FooterComponent, LoginComponent, + SigninComponent, DisconnectionComponent, HomeComponent, PostCardComponent, @@ -89,6 +92,7 @@ import { VersionRevisionService } from './version-revisions/version-revisions.se AuthService, HomeService, LoginService, + SigninService, MyPostsService, ChangePasswordService, ProfilEditionService, diff --git a/src/main/ts-v7/src/app/app.routing.ts b/src/main/ts-v7/src/app/app.routing.ts index 10bd2ba..418462f 100755 --- a/src/main/ts-v7/src/app/app.routing.ts +++ b/src/main/ts-v7/src/app/app.routing.ts @@ -3,6 +3,7 @@ import { Routes } from '@angular/router'; import { AuthGuard } from './core/guards/auth.guard'; import { LoginComponent } from './login/login.component'; +import { SigninComponent } from './signin/signin.component'; import { HomeComponent } from './home/home.component'; import { DisconnectionComponent } from './disconnection/disconnection.component'; import { MyPostsComponent } from './posts/myPosts/my-posts.component'; @@ -16,6 +17,7 @@ import { VersionRevisionComponent } from './version-revisions/version-revisions. export const appRoutes: Routes = [ { path: 'login', component: LoginComponent }, + { path: 'signin', component: SigninComponent }, { path: 'home', component: HomeComponent }, { path: 'disconnection', component: DisconnectionComponent }, { path: 'posts/new', component: CreateUpdatePostComponent, canActivate: [AuthGuard] }, diff --git a/src/main/ts-v7/src/app/signin/signin.component.html b/src/main/ts-v7/src/app/signin/signin.component.html new file mode 100644 index 0000000..9491027 --- /dev/null +++ b/src/main/ts-v7/src/app/signin/signin.component.html @@ -0,0 +1,76 @@ +
+
+

Inscrition

+
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+

{{errorMsg}}

+
+
+
+ + Connexion + + +
+
+
+
diff --git a/src/main/ts-v7/src/app/signin/signin.component.ts b/src/main/ts-v7/src/app/signin/signin.component.ts new file mode 100644 index 0000000..b15376c --- /dev/null +++ b/src/main/ts-v7/src/app/signin/signin.component.ts @@ -0,0 +1,69 @@ +import { Component } from '@angular/core'; +import { User } from '../core/entities'; +import { SigninService } from './signin.service'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'app-signin', + templateUrl: './signin.component.html', + styles: [` + #form { + padding-bottom: 10px; + } + + .submitFormArea { + line-height: 50px; + } + + #errorMsg { + max-height: 0; + overflow: hidden; + transition: max-height 0.5s ease-out; + margin: 0; + } + `] +}) +export class SigninComponent { + model: User = new User('', '', '', '', '', null, null, ''); + confirmPassword: string; + errorMsg: string; + + constructor( + private signinService: SigninService, + private router: Router + ) {} + + onSubmit(): void { + if (this.confirmPassword && this.confirmPassword === this.model.password) { + this.signinService.signin(this.model).subscribe(() => { + this.router.navigate(['/login']); + }, error => { + // FIXME: Type the error to get the status. + switch (error.status) { + case 409: + this.setMessage('L\'adresse mail saisie n\'est pas disponible'); + break; + default: + this.setMessage('Une erreur est survenue lors de l\'inscription, veuillez réessayer plus tard'); + break; + } + }); + } else { + this.setMessage('Les mots de passe saisis ne correspondent pas'); + } + } + + setMessage(message: string): void { + this.errorMsg = message; + + const resultMsgDiv = document.getElementById('errorMsg'); + resultMsgDiv.style.maxHeight = '64px'; + + setTimeout(() => { + resultMsgDiv.style.maxHeight = '0px'; + setTimeout(() => { + this.errorMsg = undefined; + }, 550); + }, 3000); + } +} diff --git a/src/main/ts-v7/src/app/signin/signin.service.ts b/src/main/ts-v7/src/app/signin/signin.service.ts new file mode 100644 index 0000000..8f48bae --- /dev/null +++ b/src/main/ts-v7/src/app/signin/signin.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { User } from '../core/entities'; + +@Injectable() +export class SigninService { + + constructor(private http: HttpClient) {} + + signin(user: User): Observable { + return this.http.post('/api/account/signin', user); + } +}