44import Log from './Log' ;
55import JsonService from './JsonService' ;
66
7+ const OidcMetadataUrlPath = '.well-known/openid-configuration' ;
8+
79export default class MetadataService {
810 constructor ( settings , JsonServiceCtor = JsonService ) {
911 if ( ! settings ) {
@@ -15,6 +17,26 @@ export default class MetadataService {
1517 this . _jsonService = new JsonServiceCtor ( ) ;
1618 }
1719
20+ get metadataUrl ( ) {
21+ if ( ! this . _metadataUrl ) {
22+ if ( this . _settings . metadataUrl ) {
23+ this . _metadataUrl = this . _settings . metadataUrl ;
24+ }
25+ else {
26+ this . _metadataUrl = this . _settings . authority ;
27+
28+ if ( this . _metadataUrl && this . _metadataUrl . indexOf ( OidcMetadataUrlPath ) < 0 ) {
29+ if ( this . _metadataUrl [ this . _metadataUrl . length - 1 ] !== '/' ) {
30+ this . _metadataUrl += '/' ;
31+ }
32+ this . _metadataUrl += OidcMetadataUrlPath ;
33+ }
34+ }
35+ }
36+
37+ return this . _metadataUrl ;
38+ }
39+
1840 getMetadata ( ) {
1941 Log . debug ( "MetadataService.getMetadata" ) ;
2042
@@ -23,14 +45,14 @@ export default class MetadataService {
2345 return Promise . resolve ( this . _settings . metadata ) ;
2446 }
2547
26- if ( ! this . _settings . metadataUrl ) {
27- Log . error ( "No metadataUrl configured on settings" ) ;
28- return Promise . reject ( new Error ( "No metadataUrl configured on settings" ) ) ;
48+ if ( ! this . metadataUrl ) {
49+ Log . error ( "No authority or metadataUrl configured on settings" ) ;
50+ return Promise . reject ( new Error ( "No authority or metadataUrl configured on settings" ) ) ;
2951 }
3052
31- Log . debug ( "getting metadata from" , this . _settings . metadataUrl ) ;
53+ Log . debug ( "getting metadata from" , this . metadataUrl ) ;
3254
33- return this . _jsonService . getJson ( this . _settings . metadataUrl )
55+ return this . _jsonService . getJson ( this . metadataUrl )
3456 . then ( metadata => {
3557 Log . debug ( "json received" ) ;
3658 this . _settings . metadata = metadata ;
0 commit comments