Browse Source

Add support for port in oauth2 domain name. Update proxy.conf to support oauth2 urls

pull/3583/head
Igor Kulikov 6 years ago
parent
commit
8c29339f13
  1. 2
      application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java
  2. 16
      application/src/main/java/org/thingsboard/server/utils/MiscUtils.java
  3. 8
      ui-ngx/proxy.conf.js
  4. 3
      ui-ngx/src/app/modules/home/pages/admin/oauth2-settings.component.ts

2
application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java

@ -40,7 +40,7 @@ public class OAuth2Controller extends BaseController {
@ResponseBody
public List<OAuth2ClientInfo> getOAuth2Clients(HttpServletRequest request) throws ThingsboardException {
try {
return oAuth2Service.getOAuth2Clients(MiscUtils.getScheme(request), MiscUtils.getDomainName(request));
return oAuth2Service.getOAuth2Clients(MiscUtils.getScheme(request), MiscUtils.getDomainNameAndPort(request));
} catch (Exception e) {
throw handleException(e);
}

16
application/src/main/java/org/thingsboard/server/utils/MiscUtils.java

@ -68,6 +68,22 @@ public class MiscUtils {
return request.getServerName();
}
public static String getDomainNameAndPort(HttpServletRequest request){
String domainName = getDomainName(request);
String scheme = getScheme(request);
int port = MiscUtils.getPort(request);
if (needsPort(scheme, port)) {
domainName += ":" + port;
}
return domainName;
}
private static boolean needsPort(String scheme, int port) {
boolean isHttpDefault = "http".equals(scheme.toLowerCase()) && port == 80;
boolean isHttpsDefault = "https".equals(scheme.toLowerCase()) && port == 443;
return !isHttpDefault && !isHttpsDefault;
}
public static int getPort(HttpServletRequest request){
String forwardedProto = request.getHeader("x-forwarded-proto");

8
ui-ngx/proxy.conf.js

@ -27,6 +27,14 @@ const PROXY_CONFIG = {
"target": ruleNodeUiforwardUrl,
"secure": false,
},
"/oauth2": {
"target": forwardUrl,
"secure": false,
},
"/login/oauth2": {
"target": forwardUrl,
"secure": false,
},
"/static": {
"target": forwardUrl,
"secure": false,

3
ui-ngx/src/app/modules/home/pages/admin/oauth2-settings.component.ts

@ -52,6 +52,7 @@ import { OAuth2Service } from '@core/http/oauth2.service';
export class OAuth2SettingsComponent extends PageComponent implements OnInit, HasConfirmForm, OnDestroy {
private URL_REGEXP = /^[A-Za-z][A-Za-z\d.+-]*:\/*(?:\w+(?::\w+)?@)?[^\s/]+(?::\d+)?(?:\/[\w#!:.,?+=&%@\-/]*)?$/;
private DOMAIN_AND_PORT_REGEXP = /^(?:\w+(?::\w+)?@)?[^\s/]+(?::\d+)?$/;
private subscriptions: Subscription[] = [];
private templates = new Map<string, OAuth2ClientRegistrationTemplate>();
private defaultProvider = {
@ -233,7 +234,7 @@ export class OAuth2SettingsComponent extends PageComponent implements OnInit, Ha
const domain = this.fb.group({
name: [domainInfo ? domainInfo.name : this.window.location.hostname, [
Validators.required,
Validators.pattern('((?![:/]).)*$')]],
Validators.pattern(this.DOMAIN_AND_PORT_REGEXP)]],
scheme: [domainInfo?.scheme ? domainInfo.scheme : DomainSchema.HTTPS, Validators.required]
}, {validators: this.uniqueDomainValidator});
return domain;

Loading…
Cancel
Save