Skip to content

Commit 91df37d

Browse files
committed
10_09_registration
1 parent a131347 commit 91df37d

File tree

11 files changed

+77
-6
lines changed

11 files changed

+77
-6
lines changed

config/curl.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
#### get Users 100001
88
`curl -s http://localhost:8080/topjava/rest/admin/users/100001 --user admin@gmail.com:admin`
99

10+
#### register User
11+
`curl -s -i -X POST -d '{"name":"New User","email":"test@mail.ru","password":"test-password"}' -H 'Content-Type:application/json;charset=UTF-8' http://localhost:8080/topjava/rest/profile`
12+
13+
#### get Profile
14+
`curl -s http://localhost:8080/topjava/rest/profile --user test@mail.ru:test-password`
15+
1016
#### get All Meals
1117
`curl -s http://localhost:8080/topjava/rest/profile/meals --user user@yandex.ru:password`
1218

config/messages/app.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ All REST interface covered with JUnit tests by Spring MVC Test and Spring Securi
77
app.footer=<a href="https://github.com/JavaOPs/topjava" target=_blank>Spring 5/JPA Enterprise (Topjava)</a> internship application
88
app.login=Login as
99
app.profile=profile
10+
app.register=Registration
11+
app.registered=You are registered. Please Sign in.
1012
1113
user.title=Users
1214
user.edit=Edit user

config/messages/app_ru.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ app.description=<a href="https://github.com/JavaOPs/topjava">Java Enterprise п
77
app.footer=Приложение стажировки <a href="https://github.com/JavaOPs/topjava" target=_blank>Spring 5/JPA Enterprise (Topjava)</a>
88
app.login=Зайти как
99
app.profile=профиль
10+
app.register=Регистрация
11+
app.registered=Вы зарегистрированы. Введите ваш логин/пароль.
1012

1113
user.title=Пользователи
1214
user.edit=Редактировать пользователя

src/main/java/ru/javawebinar/topjava/web/user/AbstractUserController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ public User get(int id) {
2929
return service.get(id);
3030
}
3131

32-
public void create(UserTo userTo) {
32+
public User create(UserTo userTo) {
3333
log.info("create {}", userTo);
3434
checkIsNew(userTo);
35-
service.create(UsersUtil.createNewFromTo(userTo));
35+
return service.create(UsersUtil.createNewFromTo(userTo));
3636
}
3737

3838
public User create(User user) {

src/main/java/ru/javawebinar/topjava/web/user/ProfileRestController.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@
22

33
import org.springframework.http.HttpStatus;
44
import org.springframework.http.MediaType;
5+
import org.springframework.http.ResponseEntity;
56
import org.springframework.web.bind.annotation.*;
7+
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
68
import ru.javawebinar.topjava.model.User;
79
import ru.javawebinar.topjava.to.UserTo;
810

11+
import java.net.URI;
12+
913
import static ru.javawebinar.topjava.web.SecurityUtil.authUserId;
1014

1115
@RestController
@@ -24,6 +28,15 @@ public void delete() {
2428
super.delete(authUserId());
2529
}
2630

31+
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
32+
@ResponseStatus(HttpStatus.CREATED)
33+
public ResponseEntity<User> register(@RequestBody UserTo userTo) {
34+
User created = super.create(userTo);
35+
URI uriOfNewResource = ServletUriComponentsBuilder.fromCurrentContextPath()
36+
.path(REST_URL).build().toUri();
37+
return ResponseEntity.created(uriOfNewResource).body(created);
38+
}
39+
2740
@PutMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
2841
@ResponseStatus(HttpStatus.NO_CONTENT)
2942
public void update(@RequestBody UserTo userTo) {

src/main/java/ru/javawebinar/topjava/web/user/ProfileUIController.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ru.javawebinar.topjava.web.user;
22

33
import org.springframework.stereotype.Controller;
4+
import org.springframework.ui.ModelMap;
45
import org.springframework.validation.BindingResult;
56
import org.springframework.web.bind.annotation.GetMapping;
67
import org.springframework.web.bind.annotation.PostMapping;
@@ -31,4 +32,23 @@ public String updateProfile(@Valid UserTo userTo, BindingResult result, SessionS
3132
return "redirect:/meals";
3233
}
3334
}
35+
36+
@GetMapping("/register")
37+
public String register(ModelMap model) {
38+
model.addAttribute("userTo", new UserTo());
39+
model.addAttribute("register", true);
40+
return "profile";
41+
}
42+
43+
@PostMapping("/register")
44+
public String saveRegister(@Valid UserTo userTo, BindingResult result, SessionStatus status, ModelMap model) {
45+
if (result.hasErrors()) {
46+
model.addAttribute("register", true);
47+
return "profile";
48+
} else {
49+
super.create(userTo);
50+
status.setComplete();
51+
return "redirect:/login?message=app.registered&username=" + userTo.getEmail();
52+
}
53+
}
3454
}

src/main/resources/spring/spring-security.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<http pattern="/rest/**" use-expressions="true" name="restSecurityFilterChain" create-session="stateless">
1111
<http-basic/>
1212
<intercept-url pattern="/rest/admin/**" access="hasRole('ADMIN')"/>
13+
<intercept-url pattern="/rest/profile" method="POST" access="isAnonymous()"/>
1314
<intercept-url pattern="/**" access="isAuthenticated()"/>
1415
<csrf disabled="true"/>
1516
</http>
@@ -18,6 +19,7 @@
1819

1920
<http>
2021
<intercept-url pattern="/login" access="permitAll()"/>
22+
<intercept-url pattern="/profile/register" access="isAnonymous()"/>
2123

2224
<intercept-url pattern="/admin/**" access="hasRole('ADMIN')"/>
2325
<intercept-url pattern="/**" access="isAuthenticated()"/>

src/main/webapp/WEB-INF/jsp/fragments/headTag.jsp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<link rel="shortcut icon" href="resources/images/icon-meal.png">
1717

1818
<%--http://stackoverflow.com/a/24070373/548473--%>
19-
<script src="webjars/jquery/3.7.1/jquery.min.js" defer></script>
19+
<script src="webjars/jquery/3.7.1/jquery.min.js"></script>
2020
<script src="webjars/bootstrap/4.6.2/js/bootstrap.min.js" defer></script>
2121
<script src="webjars/datatables/1.13.5/js/jquery.dataTables.min.js" defer></script>
2222
<script src="webjars/datatables/1.13.5/js/dataTables.bootstrap4.min.js" defer></script>

src/main/webapp/WEB-INF/jsp/login.jsp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
</c:if>
1919
<sec:authorize access="isAnonymous()">
2020
<div class="pt-2">
21+
<a class="btn btn-lg btn-info mt-2" href="profile/register"><spring:message code="app.register"/> &raquo;</a>
2122
<button type="submit" class="btn btn-lg btn-primary mt-2" onclick="login('user@yandex.ru', 'password')">
2223
<spring:message code="app.login"/> User
2324
</button>
@@ -57,10 +58,17 @@
5758
</div>
5859
<jsp:include page="fragments/footer.jsp"/>
5960
<script type="text/javascript">
61+
<c:if test="${not empty param.username}">
62+
setCredentials("${param.username}", "");
63+
</c:if>
64+
6065
function login(username, password) {
66+
setCredentials(username, password);
67+
$("#login_form").submit();
68+
}
69+
function setCredentials(username, password) {
6170
$('input[name="username"]').val(username);
6271
$('input[name="password"]').val(password);
63-
$("#login_form").submit();
6472
}
6573
</script>
6674
</body>

src/main/webapp/WEB-INF/jsp/profile.jsp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
<%--@elvariable id="userTo" type="ru.javawebinar.topjava.to.UserTo"--%>
1515
<div class="row">
1616
<div class="col-5 offset-3">
17-
<h3>${userTo.name} <spring:message code="app.profile"/></h3>
18-
<form:form class="form-group" modelAttribute="userTo" method="post" action="profile"
17+
<h3>${userTo.name} <spring:message code="${register ? 'app.register' : 'app.profile'}"/></h3>
18+
<form:form class="form-group" modelAttribute="userTo" method="post" action="${register ? 'profile/register' : 'profile'}"
1919
charset="utf-8" accept-charset="UTF-8">
2020

2121
<topjava:inputField labelCode="user.name" name="name"/>

0 commit comments

Comments
 (0)