little login fixum

This commit is contained in:
Stepan Usatiuk
2023-12-16 16:48:58 +01:00
parent ab566ebf24
commit 22aa0585ea
7 changed files with 53 additions and 5 deletions

View File

@@ -13,6 +13,7 @@ import { Home } from "./Home";
import { loginAction, signupAction } from "./actions";
import { homeLoader } from "./loaders";
import { isError } from "./api/dto";
import { Feed } from "./Feed";
const router = createBrowserRouter([
{
@@ -39,6 +40,7 @@ const router = createBrowserRouter([
return ret;
},
element: <Home />,
children: [{ path: "feed", element: <Feed /> }],
},
{
path: "/login",

3
client/src/Feed.tsx Normal file
View File

@@ -0,0 +1,3 @@
export function Feed() {
return <a>feed</a>;
}

View File

@@ -9,7 +9,7 @@ export function Login() {
| undefined;
if (data && !isError(data)) {
return <div className="authForm">Success, now log in!;</div>;
return <div className="authForm">Login success</div>;
}
let errors: JSX.Element[] = [];

View File

@@ -9,7 +9,7 @@ export function Signup() {
| undefined;
if (data && !isError(data)) {
return <div className="authForm">Success, now log in!;</div>;
return <div className="authForm">Signup success</div>;
}
let errors: JSX.Element[] = [];

View File

@@ -11,7 +11,7 @@ export async function loginAction({ request }: ActionFunctionArgs) {
formData.get("password")!.toString(),
);
if (!isError(ret)) {
if (ret && !isError(ret)) {
setToken(ret.token);
return redirect("/home");
}
@@ -21,9 +21,26 @@ export async function loginAction({ request }: ActionFunctionArgs) {
export async function signupAction({ request }: ActionFunctionArgs) {
const formData = await request.formData();
return await signup(
const s = await signup(
formData.get("username")!.toString(),
formData.get("fullName")!.toString(),
formData.get("password")!.toString(),
);
if (!s || isError(s)) {
return s;
}
// Login if everything's OK
const ret = await login(
formData.get("username")!.toString(),
formData.get("password")!.toString(),
);
if (ret && !isError(ret)) {
setToken(ret.token);
return redirect("/home");
}
return ret;
}

View File

@@ -6,11 +6,16 @@ import jakarta.validation.ConstraintViolationException;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.AuthenticationException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.server.ResponseStatusException;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import java.util.List;
import java.util.Objects;
@ControllerAdvice
public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {ConstraintViolationException.class})
@@ -19,4 +24,25 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
new ErrorTo(ex.getConstraintViolations().stream().map(ConstraintViolation::getMessage), HttpStatus.BAD_REQUEST.value()),
new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
}
@ExceptionHandler(value = {AuthenticationException.class})
protected ResponseEntity<Object> handleAuthenticationException(AuthenticationException ex, WebRequest request) {
return handleExceptionInternal(ex,
new ErrorTo(List.of(ex.getMessage()), HttpStatus.UNAUTHORIZED.value()),
new HttpHeaders(), HttpStatus.UNAUTHORIZED, request);
}
@ExceptionHandler(value = {ResponseStatusException.class})
protected ResponseEntity<Object> handleResponseStatusException(ResponseStatusException ex, WebRequest request) {
return handleExceptionInternal(ex,
new ErrorTo(List.of(Objects.requireNonNullElse(ex.getReason(), ex.getStatusCode().toString())), ex.getStatusCode().value()),
new HttpHeaders(), ex.getStatusCode(), request);
}
@ExceptionHandler(value = {Exception.class})
protected ResponseEntity<Object> handleGenericException(Exception ex, WebRequest request) {
return handleExceptionInternal(ex,
new ErrorTo(List.of("Error"), HttpStatus.INTERNAL_SERVER_ERROR.value()),
new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request);
}
}

View File

@@ -28,7 +28,7 @@ public class TokenController {
public TokenResponseTo request(@RequestBody TokenRequestTo tokenRequestTo) throws UserNotFoundException {
Optional<Person> found = personService.login(tokenRequestTo.username(), tokenRequestTo.password());
if (found.isEmpty()) throw new ResponseStatusException(HttpStatus.NOT_FOUND);
if (found.isEmpty()) throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Couldn't find user");
return new TokenResponseTo(tokenService.generateToken(found.get().getId()));
}