Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import static org.springframework.http.HttpMethod.POST;
import static org.springframework.security.config.http.SessionCreationPolicy.STATELESS;

import com.github.throyer.common.springboot.domain.services.security.SecurityService;
import com.github.throyer.common.springboot.domain.session.service.SessionService;
import com.github.throyer.common.springboot.middlewares.AuthorizationMiddleware;

import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -42,7 +42,7 @@
public class SpringSecurityConfiguration {

@Autowired
private SecurityService securityService;
private SessionService sessionService;

@Autowired
private BCryptPasswordEncoder encoder;
Expand All @@ -62,7 +62,7 @@ public class Api extends WebSecurityConfigurerAdapter {

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(securityService)
auth.userDetailsService(sessionService)
.passwordEncoder(encoder);
}

Expand Down Expand Up @@ -121,7 +121,7 @@ public class App extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.
userDetailsService(securityService)
userDetailsService(sessionService)
.passwordEncoder(encoder);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import static org.springframework.http.HttpStatus.NO_CONTENT;

import com.github.throyer.common.springboot.domain.services.recovery.RecoveryConfirmService;
import com.github.throyer.common.springboot.domain.services.recovery.RecoveryService;
import com.github.throyer.common.springboot.domain.services.recovery.RecoveryUpdateService;
import com.github.throyer.common.springboot.domain.services.user.dto.RecoveryConfirm;
import com.github.throyer.common.springboot.domain.services.user.dto.RecoveryRequest;
import com.github.throyer.common.springboot.domain.services.user.dto.RecoveryUpdate;
import com.github.throyer.common.springboot.domain.recovery.service.RecoveryConfirmService;
import com.github.throyer.common.springboot.domain.recovery.service.RecoveryService;
import com.github.throyer.common.springboot.domain.recovery.service.RecoveryUpdateService;
import com.github.throyer.common.springboot.domain.recovery.model.RecoveryConfirm;
import com.github.throyer.common.springboot.domain.recovery.model.RecoveryRequest;
import com.github.throyer.common.springboot.domain.recovery.model.RecoveryUpdate;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

import java.util.List;

import com.github.throyer.common.springboot.domain.models.entity.Role;
import com.github.throyer.common.springboot.domain.repositories.RoleRepository;
import com.github.throyer.common.springboot.domain.role.entity.Role;
import com.github.throyer.common.springboot.domain.role.repository.RoleRepository;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;

import org.springframework.beans.factory.annotation.Autowired;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import javax.validation.Valid;

import com.github.throyer.common.springboot.domain.services.security.SessionService;
import com.github.throyer.common.springboot.domain.services.security.dto.RefreshTokenRequest;
import com.github.throyer.common.springboot.domain.services.security.dto.RefreshTokenResponse;
import com.github.throyer.common.springboot.domain.services.security.dto.TokenRequest;
import com.github.throyer.common.springboot.domain.services.security.dto.TokenResponse;
import com.github.throyer.common.springboot.domain.session.model.RefreshTokenRequest;
import com.github.throyer.common.springboot.domain.session.model.RefreshTokenResponse;
import com.github.throyer.common.springboot.domain.session.model.TokenRequest;
import com.github.throyer.common.springboot.domain.session.model.TokenResponse;
import com.github.throyer.common.springboot.domain.session.service.CreateTokenService;
import com.github.throyer.common.springboot.domain.session.service.RefreshTokenService;
import static com.github.throyer.common.springboot.utils.Responses.ok;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
Expand All @@ -20,15 +22,20 @@
public class SessionsController {

@Autowired
private SessionService service;
private CreateTokenService createService;

@Autowired
private RefreshTokenService refreshService;

@PostMapping
public ResponseEntity<TokenResponse> create(@RequestBody @Valid TokenRequest request) {
return service.create(request);
var token = createService.create(request);
return ok(token);
}

@PostMapping("/refresh")
public ResponseEntity<RefreshTokenResponse> refresh(@RequestBody @Valid RefreshTokenRequest request) {
return service.refresh(request);
var token = refreshService.refresh(request);
return ok(token);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,21 @@
import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.http.HttpStatus.NO_CONTENT;

import com.github.throyer.common.springboot.domain.models.entity.User;
import com.github.throyer.common.springboot.domain.models.pagination.Page;

import com.github.throyer.common.springboot.domain.services.user.CreateUserService;
import com.github.throyer.common.springboot.domain.services.user.FindUserService;
import com.github.throyer.common.springboot.domain.services.user.RemoveUserService;
import com.github.throyer.common.springboot.domain.services.user.UpdateUserService;
import com.github.throyer.common.springboot.domain.services.user.dto.CreateUserApi;
import com.github.throyer.common.springboot.domain.services.user.dto.UpdateUser;
import com.github.throyer.common.springboot.domain.services.user.dto.UserDetails;
import static com.github.throyer.common.springboot.utils.Responses.created;
import static com.github.throyer.common.springboot.utils.Responses.ok;

import com.github.throyer.common.springboot.domain.pagination.model.Page;
import com.github.throyer.common.springboot.domain.user.service.FindUserService;
import com.github.throyer.common.springboot.domain.user.service.RemoveUserService;
import com.github.throyer.common.springboot.domain.user.model.CreateUserProps;
import com.github.throyer.common.springboot.domain.user.service.CreateUserService;
import com.github.throyer.common.springboot.domain.user.model.UpdateUserProps;
import com.github.throyer.common.springboot.domain.user.service.FindUserByIdService;
import com.github.throyer.common.springboot.domain.user.service.UpdateUserService;
import com.github.throyer.common.springboot.domain.user.model.UserDetails;

import io.swagger.v3.oas.annotations.security.SecurityRequirement;

import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -34,18 +37,27 @@
@RestController
@RequestMapping("/api/users")
public class UsersController {

@Autowired
private CreateUserService createService;

@Autowired
private UpdateUserService updateService;

@Autowired
private RemoveUserService removeService;


private final CreateUserService createService;
private final UpdateUserService updateService;
private final RemoveUserService removeService;
private final FindUserService findService;
private final FindUserByIdService findByIdService;

@Autowired
private FindUserService findService;
public UsersController(
CreateUserService createService,
UpdateUserService updateService,
RemoveUserService removeService,
FindUserService findService,
FindUserByIdService findByIdService
) {
this.createService = createService;
this.updateService = updateService;
this.removeService = removeService;
this.findService = findService;
this.findByIdService = findByIdService;
}

@GetMapping
@SecurityRequirement(name = "token")
Expand All @@ -54,38 +66,42 @@ public ResponseEntity<Page<UserDetails>> index(
Optional<Integer> page,
Optional<Integer> size
) {
var result = findService.findAll(page, size);
return ok(result);
var content = findService.findAll(page, size);
return ok(content);
}

@GetMapping("/{id}")
@SecurityRequirement(name = "token")
@PreAuthorize("hasAnyAuthority('ADM', 'USER')")
public ResponseEntity<UserDetails> show(@PathVariable Long id) {
return findService.find(id);
var user = findByIdService.find(id);
return ok(user);
}

@PostMapping
@ResponseStatus(CREATED)
public ResponseEntity<UserDetails> save(@Validated @RequestBody CreateUserApi body) {
return createService.create(body);
public ResponseEntity<UserDetails> save(
@Validated @RequestBody CreateUserProps body
) {
var user = createService.create(body);
return created(user, "api/users");
}

@PutMapping("/{id}")
@SecurityRequirement(name = "token")
@PreAuthorize("hasAnyAuthority('ADM', 'USER')")
public ResponseEntity<UserDetails> update(
@PathVariable Long id,
@RequestBody @Validated UpdateUser body
@RequestBody @Validated UpdateUserProps body
) {
return updateService.update(id, body);
var user = updateService.update(id, body);
return ok(user);
}

@DeleteMapping("/{id}")
@ResponseStatus(NO_CONTENT)
@SecurityRequirement(name = "token")
@PreAuthorize("hasAnyAuthority('ADM')")
public ResponseEntity<User> destroy(@PathVariable Long id) {
return removeService.remove(id);
public void destroy(@PathVariable Long id) {
removeService.remove(id);
}
}
Original file line number Diff line number Diff line change
@@ -1,34 +1,41 @@
package com.github.throyer.common.springboot.controllers.app;

import com.github.throyer.common.springboot.domain.services.recovery.RecoveryConfirmService;
import com.github.throyer.common.springboot.domain.services.recovery.RecoveryService;
import com.github.throyer.common.springboot.domain.services.recovery.RecoveryUpdateService;
import com.github.throyer.common.springboot.domain.services.user.dto.Codes;
import com.github.throyer.common.springboot.domain.services.user.dto.RecoveryRequest;
import com.github.throyer.common.springboot.domain.services.user.dto.Update;
import static com.github.throyer.common.springboot.utils.Responses.validate;

import com.github.throyer.common.springboot.domain.recovery.service.RecoveryConfirmService;
import com.github.throyer.common.springboot.domain.recovery.service.RecoveryService;
import com.github.throyer.common.springboot.domain.recovery.service.RecoveryUpdateService;
import com.github.throyer.common.springboot.domain.recovery.model.Codes;
import com.github.throyer.common.springboot.domain.recovery.model.RecoveryRequest;
import com.github.throyer.common.springboot.domain.recovery.model.Update;
import com.github.throyer.common.springboot.domain.shared.Type;
import com.github.throyer.common.springboot.utils.Toasts;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.server.ResponseStatusException;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
@RequestMapping("/app/recovery")
public class RecoveryController {

@Autowired
private RecoveryService recoveryService;

@Autowired
private RecoveryConfirmService confirmService;

@Autowired
private RecoveryUpdateService updateService;

@GetMapping
public String index(Model model) {
model.addAttribute("recovery", new RecoveryRequest());
Expand All @@ -41,7 +48,18 @@ public String index(
BindingResult result,
Model model
) {
return recoveryService.recovery(recovery, result, model);

if (validate(model, recovery, "recovery", result)) {
return "app/recovery/index";
}

var email = recovery.getEmail();

recoveryService.recovery(email);

model.addAttribute("codes", new Codes(email));

return "app/recovery/confirm";
}

@PostMapping("/confirm")
Expand All @@ -51,7 +69,23 @@ public String confirm(
RedirectAttributes redirect,
Model model
) {
return confirmService.confirm(codes, result, model, redirect);

if (validate(model, codes, "recovery", result)) {
return "app/recovery/confirm";
}

try {
confirmService.confirm(codes.getEmail(), codes.code());
} catch (ResponseStatusException exception) {

Toasts.add(model, "Código expirado ou invalido.", Type.DANGER);
model.addAttribute("confirm", codes);
return "app/recovery/confirm";
}

model.addAttribute("update", new Update(codes));

return "app/recovery/update";
}

@PostMapping("/update")
Expand All @@ -61,6 +95,21 @@ public String update(
RedirectAttributes redirect,
Model model
) {
return updateService.update(update, result, model, redirect);
update.validate(result);

if (validate(model, update, "update", result)) {
return "app/recovery/update";
}

try {
updateService.update(update.getEmail(), update.code(), update.getPassword());
} catch (ResponseStatusException exception) {
Toasts.add(model, "Código expirado ou invalido.", Type.DANGER);
model.addAttribute("update", update);
return "app/recovery/update";
}

Toasts.add(redirect, "Sua senha foi atualizada com sucesso.", Type.SUCCESS);
return "redirect:/app/login";
}
}
Loading