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