Add configuration endpoint.
parent
fef33dad03
commit
2e20bd6a0e
|
@ -44,6 +44,7 @@ public class RestAppConfig {
|
||||||
.requestMatchers(mvc.pattern("/error")).permitAll()
|
.requestMatchers(mvc.pattern("/error")).permitAll()
|
||||||
.requestMatchers(mvc.pattern("/api/restful/authenticate")).permitAll()
|
.requestMatchers(mvc.pattern("/api/restful/authenticate")).permitAll()
|
||||||
.requestMatchers(mvc.pattern("/api/restful/users/")).permitAll()
|
.requestMatchers(mvc.pattern("/api/restful/users/")).permitAll()
|
||||||
|
.requestMatchers(mvc.pattern("/api/restful/app/config")).permitAll()
|
||||||
.requestMatchers(mvc.pattern("/api/restful/maps/*/document/xml-pub")).permitAll()
|
.requestMatchers(mvc.pattern("/api/restful/maps/*/document/xml-pub")).permitAll()
|
||||||
.requestMatchers(mvc.pattern("/api/restful/users/resetPassword")).permitAll()
|
.requestMatchers(mvc.pattern("/api/restful/users/resetPassword")).permitAll()
|
||||||
.requestMatchers(mvc.pattern("/api/oauth2/googlecallback")).permitAll()
|
.requestMatchers(mvc.pattern("/api/oauth2/googlecallback")).permitAll()
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
/*
|
||||||
|
* Copyright [2022] [wisemapping]
|
||||||
|
*
|
||||||
|
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
|
||||||
|
* It is basically the Apache License, Version 2.0 (the "License") plus the
|
||||||
|
* "powered by wisemapping" text requirement on every single page;
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the license at
|
||||||
|
*
|
||||||
|
* http://www.wisemapping.org/license
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.wisemapping.rest;
|
||||||
|
|
||||||
|
import com.wisemapping.rest.model.RestAppConfig;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
|
||||||
|
// "config": {
|
||||||
|
// "apiBaseUrl": "http://localhost:3000",
|
||||||
|
// "analyticsAccount": "G-RSDEJH16YM",
|
||||||
|
// "clientType": "mock",
|
||||||
|
// "recaptcha2Enabled": false,
|
||||||
|
// "recaptcha2SiteKey": "6Lcat08kAAAAAIP-HjhzIa-Yq21PHgGa_ADWc-Ro",
|
||||||
|
// "googleOauth2Url": "https: //accounts.google.com/o/oauth2/v2/auth?redirect_uri=https://app.wisemapping.com/c/registration-google&prompt=consent&response_type=code&client_id=625682766634-cocbbbbb403iuvps1evecdk6d7phvbkf.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&access_type=offline&state=wisemapping&include_granted_scopes=true"
|
||||||
|
// }
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/restful/app")
|
||||||
|
public class AppController extends BaseController {
|
||||||
|
|
||||||
|
@Value("${app.security.oauth2.google.url:}")
|
||||||
|
private String googleOauth2Url;
|
||||||
|
|
||||||
|
@Value("${app.registration.enabled:true}")
|
||||||
|
private Boolean isRegistrationEnabled;
|
||||||
|
|
||||||
|
@Value("${app.registration.captcha.enabled:false}")
|
||||||
|
private Boolean isCaptchaEnabled;
|
||||||
|
|
||||||
|
@Value("${app.registration.captcha.siteKey:}")
|
||||||
|
private String captchaSiteKey;
|
||||||
|
|
||||||
|
@Value("${app.site.api-base-url:}")
|
||||||
|
private String apiBaseUrl;
|
||||||
|
|
||||||
|
@Value("${app.analytics.account:}")
|
||||||
|
private String analyticsAccount;
|
||||||
|
|
||||||
|
@RequestMapping(method = RequestMethod.GET, value = "/config")
|
||||||
|
@ResponseStatus(value = HttpStatus.OK)
|
||||||
|
public RestAppConfig appConfig() {
|
||||||
|
return new RestAppConfig.RestAppConfigBuilder()
|
||||||
|
.setApiUrl(apiBaseUrl)
|
||||||
|
.setCaptchaSiteKey(captchaSiteKey)
|
||||||
|
.setGoogleOauth2Url(googleOauth2Url)
|
||||||
|
.setAnalyticsAccount(analyticsAccount)
|
||||||
|
.setRegistrationEnabled(isRegistrationEnabled)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGoogleOauth2Url() {
|
||||||
|
return googleOauth2Url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGoogleOauth2Url(String googleOauth2Url) {
|
||||||
|
this.googleOauth2Url = googleOauth2Url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getRegistrationEnabled() {
|
||||||
|
return isRegistrationEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRegistrationEnabled(Boolean registrationEnabled) {
|
||||||
|
isRegistrationEnabled = registrationEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getCaptchaEnabled() {
|
||||||
|
return isCaptchaEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCaptchaEnabled(Boolean captchaEnabled) {
|
||||||
|
isCaptchaEnabled = captchaEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCaptchaSiteKey() {
|
||||||
|
return captchaSiteKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCaptchaSiteKey(String captchaSiteKey) {
|
||||||
|
this.captchaSiteKey = captchaSiteKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getApiBaseUrl() {
|
||||||
|
return apiBaseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setApiBaseUrl(String apiBaseUrl) {
|
||||||
|
this.apiBaseUrl = apiBaseUrl;
|
||||||
|
}
|
||||||
|
}
|
|
@ -48,7 +48,6 @@ public class LabelController extends BaseController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private LabelService labelService;
|
private LabelService labelService;
|
||||||
|
|
||||||
|
|
||||||
@RequestMapping(method = RequestMethod.POST, value = "", consumes = {"application/json"})
|
@RequestMapping(method = RequestMethod.POST, value = "", consumes = {"application/json"})
|
||||||
@ResponseStatus(value = HttpStatus.CREATED)
|
@ResponseStatus(value = HttpStatus.CREATED)
|
||||||
public void createLabel(@RequestBody RestLabel restLabel, @NotNull HttpServletResponse response, @RequestParam(required = false) String title) throws WiseMappingException {
|
public void createLabel(@RequestBody RestLabel restLabel, @NotNull HttpServletResponse response, @RequestParam(required = false) String title) throws WiseMappingException {
|
||||||
|
|
|
@ -65,7 +65,7 @@ public class MindmapController extends BaseController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
|
||||||
@Value("${accounts.maxInactive:20}")
|
@Value("${app.accounts.max-inactive:20}")
|
||||||
private int maxAccountsInactive;
|
private int maxAccountsInactive;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,145 @@
|
||||||
|
/*
|
||||||
|
* Copyright [2022] [wisemapping]
|
||||||
|
*
|
||||||
|
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
|
||||||
|
* It is basically the Apache License, Version 2.0 (the "License") plus the
|
||||||
|
* "powered by wisemapping" text requirement on every single page;
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the license at
|
||||||
|
*
|
||||||
|
* http://www.wisemapping.org/license
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.wisemapping.rest.model;
|
||||||
|
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
|
||||||
|
@JsonAutoDetect(
|
||||||
|
fieldVisibility = JsonAutoDetect.Visibility.NONE,
|
||||||
|
getterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY,
|
||||||
|
isGetterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY)
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
|
public class RestAppConfig {
|
||||||
|
private String apiBaseUrl;
|
||||||
|
private String googleOauth2Url;
|
||||||
|
private boolean registrationEnabled;
|
||||||
|
private boolean recaptcha2Enabled;
|
||||||
|
private String recaptcha2SiteKey;
|
||||||
|
private String analyticsAccount;
|
||||||
|
|
||||||
|
RestAppConfig() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getApiBaseUrl() {
|
||||||
|
return apiBaseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setApiBaseUrl(String apiBaseUrl) {
|
||||||
|
this.apiBaseUrl = apiBaseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGoogleOauth2Url() {
|
||||||
|
return googleOauth2Url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGoogleOauth2Url(String googleOauth2Url) {
|
||||||
|
this.googleOauth2Url = googleOauth2Url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRegistrationEnabled() {
|
||||||
|
return registrationEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRegistrationEnabled(boolean registrationEnabled) {
|
||||||
|
this.registrationEnabled = registrationEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRecaptcha2Enabled() {
|
||||||
|
return recaptcha2Enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRecaptcha2Enabled(boolean recaptcha2Enabled) {
|
||||||
|
this.recaptcha2Enabled = recaptcha2Enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRecaptcha2SiteKey() {
|
||||||
|
return recaptcha2SiteKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRecaptcha2SiteKey(String recaptcha2SiteKey) {
|
||||||
|
this.recaptcha2SiteKey = recaptcha2SiteKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAnalyticsAccount() {
|
||||||
|
return analyticsAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnalyticsAccount(String analyticsAccount) {
|
||||||
|
this.analyticsAccount = analyticsAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class RestAppConfigBuilder {
|
||||||
|
private String apiBaseUrl;
|
||||||
|
private String googleOauth2Url;
|
||||||
|
private boolean registrationEnabled;
|
||||||
|
private boolean isCatchaEnabled = false;
|
||||||
|
private String captchaSiteKey;
|
||||||
|
private String analyticsAccount;
|
||||||
|
|
||||||
|
public RestAppConfigBuilder setCaptchaSiteKey(@NotNull String captchaSiteKey) {
|
||||||
|
this.captchaSiteKey = captchaSiteKey;
|
||||||
|
this.isCatchaEnabled = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RestAppConfigBuilder setApiUrl(@NotNull String apiBaseUrl) {
|
||||||
|
this.apiBaseUrl = apiBaseUrl;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RestAppConfigBuilder setGoogleOauth2Url(@NotNull String googleOauth2Url) {
|
||||||
|
this.googleOauth2Url = googleOauth2Url;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setGoogleAnalyticsAccount(@NotNull String analyticsAccount) {
|
||||||
|
this.analyticsAccount = analyticsAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RestAppConfigBuilder setRegistrationEnabled(@NotNull boolean registrationEnabled) {
|
||||||
|
this.registrationEnabled = registrationEnabled;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RestAppConfigBuilder setAnalyticsAccount(@NotNull String analyticsAccount) {
|
||||||
|
this.analyticsAccount = analyticsAccount;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public RestAppConfig build() {
|
||||||
|
final RestAppConfig result = new RestAppConfig();
|
||||||
|
result.googleOauth2Url = googleOauth2Url;
|
||||||
|
result.recaptcha2SiteKey = captchaSiteKey;
|
||||||
|
result.recaptcha2Enabled = isCatchaEnabled;
|
||||||
|
result.apiBaseUrl = apiBaseUrl;
|
||||||
|
result.registrationEnabled = registrationEnabled;
|
||||||
|
result.analyticsAccount = analyticsAccount;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -44,13 +44,13 @@ public final class MailerService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private VelocityEngineWrapper velocityEngineWrapper;
|
private VelocityEngineWrapper velocityEngineWrapper;
|
||||||
|
|
||||||
@Value("${app.mail.serverSendEmail}")
|
@Value("${app.mail.sender-email}")
|
||||||
private String serverFromEmail;
|
private String serverFromEmail;
|
||||||
|
|
||||||
@Value("${app.mail.enabled:true}")
|
@Value("${app.mail.enabled:true}")
|
||||||
private boolean isEnabled;
|
private boolean isEnabled;
|
||||||
|
|
||||||
@Value("${app.mail.supportEmail}")
|
@Value("${app.mail.support-email}")
|
||||||
private String supportEmail;
|
private String supportEmail;
|
||||||
|
|
||||||
//~ Methods ..............................................................................................
|
//~ Methods ..............................................................................................
|
||||||
|
|
|
@ -44,7 +44,7 @@ final public class NotificationService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private MailerService mailerService;
|
private MailerService mailerService;
|
||||||
|
|
||||||
@Value("${app.site.baseurl:http://localhost:8080/}")
|
@Value("${app.site.ui-base-url:http://localhost:8080/}")
|
||||||
private String baseUrl;
|
private String baseUrl;
|
||||||
|
|
||||||
public void newCollaboration(@NotNull Collaboration collaboration, @NotNull Mindmap mindmap, @NotNull Account user, @Nullable String message) {
|
public void newCollaboration(@NotNull Collaboration collaboration, @NotNull Mindmap mindmap, @NotNull Account user, @Nullable String message) {
|
||||||
|
@ -121,7 +121,7 @@ final public class NotificationService {
|
||||||
model.put("messageTitle", messageTitle);
|
model.put("messageTitle", messageTitle);
|
||||||
model.put("messageBody", messageBody);
|
model.put("messageBody", messageBody);
|
||||||
model.put("baseUrl", getBaseUrl());
|
model.put("baseUrl", getBaseUrl());
|
||||||
model.put("supportEmail", mailerService.getSupportEmail());
|
model.put("support-email", mailerService.getSupportEmail());
|
||||||
model.put("doNotReplay", messageSource.getMessage("EMAIL.DO_NOT_REPLAY", new Object[]{mailerService.getSupportEmail()}, locale));
|
model.put("doNotReplay", messageSource.getMessage("EMAIL.DO_NOT_REPLAY", new Object[]{mailerService.getSupportEmail()}, locale));
|
||||||
|
|
||||||
// To resolve resources on templates ...
|
// To resolve resources on templates ...
|
||||||
|
|
|
@ -18,7 +18,7 @@ spring:
|
||||||
writetimeout: 5000
|
writetimeout: 5000
|
||||||
output:
|
output:
|
||||||
ansi:
|
ansi:
|
||||||
enabled=always:
|
enabled: always
|
||||||
application:
|
application:
|
||||||
name: wisemapping-api
|
name: wisemapping-api
|
||||||
title: wisemapping-api
|
title: wisemapping-api
|
||||||
|
@ -55,18 +55,23 @@ logging:
|
||||||
# Application Configuration.
|
# Application Configuration.
|
||||||
app:
|
app:
|
||||||
site:
|
site:
|
||||||
baseurl: https://localhost:8080
|
ui-base-url: https://localhost:8080
|
||||||
|
api-base-url: https://api.wisemapping.com
|
||||||
api:
|
api:
|
||||||
http-basic-enabled: false
|
http-basic-enabled: false
|
||||||
|
# analytics:
|
||||||
|
# account:
|
||||||
jwt:
|
jwt:
|
||||||
secret: dlqxKAg685SaKhsQXIMeM=JWCw3bkl3Ei3Tb7LMlnd19oMd66burPNlJ0Po1qguyjgpakQTk2CN3
|
secret: dlqxKAg685SaKhsQXIMeM=JWCw3bkl3Ei3Tb7LMlnd19oMd66burPNlJ0Po1qguyjgpakQTk2CN3
|
||||||
expirationMin: 10080 # One week
|
expirationMin: 10080 # One week
|
||||||
admin:
|
admin:
|
||||||
user: admin@wisemapping.org
|
user: admin@wisemapping.org
|
||||||
mail:
|
mail:
|
||||||
serverSendEmail: root@localhost
|
sender-email: root@localhost
|
||||||
supportEmail: root@localhost
|
support-email: root@localhost
|
||||||
enabled: false
|
enabled: false
|
||||||
|
accounts:
|
||||||
|
max-inactive: 20
|
||||||
#######################################################################################
|
#######################################################################################
|
||||||
# Google OAuth Authentication
|
# Google OAuth Authentication
|
||||||
#######################################################################################
|
#######################################################################################
|
||||||
|
@ -74,7 +79,7 @@ app:
|
||||||
#security.oauth2.google.clientId=<config settings>
|
#security.oauth2.google.clientId=<config settings>
|
||||||
# OAuth Client secret
|
# OAuth Client secret
|
||||||
#security.oauth2.google.clientSecret=<oauth client>
|
#security.oauth2.google.clientSecret=<oauth client>
|
||||||
# Redirect to this url, this url must be configured in the google app {baseurl}/c/registration-google
|
# Redirect to this url, this url must be configured in the google app {ui-base-url}/c/registration-google
|
||||||
#security.oauth2.google.callbackUrl=<oauth callback url>
|
#security.oauth2.google.callbackUrl=<oauth callback url>
|
||||||
security:
|
security:
|
||||||
# corsAllowedOrigins: https://dev.wisemapping.com
|
# corsAllowedOrigins: https://dev.wisemapping.com
|
||||||
|
@ -82,13 +87,17 @@ app:
|
||||||
google:
|
google:
|
||||||
confirmUrl: https://oauth2.googleapis.com/token
|
confirmUrl: https://oauth2.googleapis.com/token
|
||||||
userinfoUrl: https://www:googleapis.com/oauth2/v3/userinfo
|
userinfoUrl: https://www:googleapis.com/oauth2/v3/userinfo
|
||||||
|
callbackUrl: https://app.wisemapping.com/c/registration-google
|
||||||
|
clientId: 625682766634-cocbbbbb403iuvps1evecdk6d7phvbkf.apps.googleusercontent.com
|
||||||
url: https://accounts.google.com/o/oauth2/v2/auth?redirect_uri=${app.security.oauth2.google.callbackUrl}&prompt=consent&response_type=code&client_id=${app.security.oauth2.google.clientId}&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&access_type=offline&state=wisemapping&include_granted_scopes=true
|
url: https://accounts.google.com/o/oauth2/v2/auth?redirect_uri=${app.security.oauth2.google.callbackUrl}&prompt=consent&response_type=code&client_id=${app.security.oauth2.google.clientId}&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&access_type=offline&state=wisemapping&include_granted_scopes=true
|
||||||
# accounts:
|
# accounts:
|
||||||
# exclusion:
|
# exclusion:
|
||||||
# domain:
|
# domain:
|
||||||
registration:
|
registration:
|
||||||
enabled: false
|
enabled: true
|
||||||
captcha:
|
captcha:
|
||||||
enabled: false
|
enabled: false
|
||||||
secretKey: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe
|
siteKey: some-key
|
||||||
|
secretKey: some-secret
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue