1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.api.admin.accesstoken;
17
18 import static org.codelibs.core.stream.StreamUtil.stream;
19 import static org.codelibs.fess.app.web.admin.accesstoken.AdminAccesstokenAction.getAccessToken;
20
21 import java.util.List;
22 import java.util.stream.Collectors;
23
24 import org.codelibs.core.lang.StringUtil;
25 import org.codelibs.fess.Constants;
26 import org.codelibs.fess.app.pager.AccessTokenPager;
27 import org.codelibs.fess.app.web.CrudMode;
28 import org.codelibs.fess.app.web.admin.accesstoken.AdminAccesstokenAction;
29 import org.codelibs.fess.app.web.api.ApiResult;
30 import org.codelibs.fess.app.web.api.ApiResult.ApiConfigResponse;
31 import org.codelibs.fess.app.web.api.ApiResult.ApiConfigsResponse;
32 import org.codelibs.fess.app.web.api.ApiResult.ApiResponse;
33 import org.codelibs.fess.app.web.api.ApiResult.ApiUpdateResponse;
34 import org.codelibs.fess.app.web.api.ApiResult.Status;
35 import org.codelibs.fess.app.web.api.admin.FessApiAdminAction;
36 import org.codelibs.fess.es.config.exentity.AccessToken;
37 import org.codelibs.fess.helper.PermissionHelper;
38 import org.codelibs.fess.util.ComponentUtil;
39 import org.lastaflute.web.Execute;
40 import org.lastaflute.web.response.JsonResponse;
41
42
43
44
45 public class ApiAdminAccesstokenAction extends FessApiAdminAction {
46
47
48
49
50
51
52
53
54
55
56
57 @Execute
58 public JsonResponse<ApiResult> settings(final SearchBody body) {
59 validateApi(body, messages -> {});
60 final AccessTokenPager pager = copyBeanToNewBean(body, AccessTokenPager.class);
61 final List<AccessToken> list = accessTokenService.getAccessTokenList(pager);
62 return asJson(new ApiConfigsResponse<EditBody>().settings(list.stream().map(this::createEditBody).collect(Collectors.toList()))
63 .total(pager.getAllRecordCount()).status(Status.OK).result());
64 }
65
66
67 @Execute
68 public JsonResponse<ApiResult> get$setting(final String id) {
69 return asJson(new ApiConfigResponse().setting(accessTokenService.getAccessToken(id).map(this::createEditBody).orElseGet(() -> {
70 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
71 return null;
72 })).status(Status.OK).result());
73 }
74
75
76 @Execute
77 public JsonResponse<ApiResult> put$setting(final CreateBody body) {
78 validateApi(body, messages -> {});
79 body.crudMode = CrudMode.CREATE;
80 final AccessToken accessToken = getAccessToken(body).map(entity -> {
81 entity.setToken(accessTokenHelper.generateAccessToken());
82 try {
83 accessTokenService.store(entity);
84 } catch (final Exception e) {
85 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateCrudTable(GLOBAL, buildThrowableMessage(e)));
86 }
87 return entity;
88 }).orElseGet(() -> {
89 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL));
90 return null;
91 });
92 return asJson(new ApiUpdateResponse().id(accessToken.getId()).created(true).status(Status.OK).result());
93 }
94
95
96 @Execute
97 public JsonResponse<ApiResult> post$setting(final EditBody body) {
98 validateApi(body, messages -> {});
99 body.crudMode = CrudMode.EDIT;
100 final AccessToken accessToken = getAccessToken(body).map(entity -> {
101 try {
102 accessTokenService.store(entity);
103 } catch (final Exception e) {
104 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToUpdateCrudTable(GLOBAL, buildThrowableMessage(e)));
105 }
106 return entity;
107 }).orElseGet(() -> {
108 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, body.id));
109 return null;
110 });
111 return asJson(new ApiUpdateResponse().id(accessToken.getId()).created(false).status(Status.OK).result());
112 }
113
114
115 @Execute
116 public JsonResponse<ApiResult> delete$setting(final String id) {
117 accessTokenService.getAccessToken(id).ifPresent(entity -> {
118 try {
119 accessTokenService.delete(entity);
120 saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
121 } catch (final Exception e) {
122 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToDeleteCrudTable(GLOBAL, buildThrowableMessage(e)));
123 }
124 }).orElse(() -> {
125 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
126 });
127 return asJson(new ApiResponse().status(Status.OK).result());
128 }
129
130 protected EditBody createEditBody(final AccessToken entity) {
131 final EditBody body = new EditBody();
132 copyBeanToBean(entity, body, copyOp -> copyOp.exclude(Constants.PERMISSIONS, AdminAccesstokenAction.EXPIRED_TIME).excludeNull()
133 .dateConverter(Constants.DEFAULT_DATETIME_FORMAT, AdminAccesstokenAction.EXPIRES));
134 final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
135 body.permissions = stream(entity.getPermissions()).get(
136 stream -> stream.map(permissionHelper::decode).filter(StringUtil::isNotBlank).distinct().collect(Collectors.joining("\n")));
137 body.crudMode = null;
138 return body;
139
140 }
141 }