@@ -23,10 +23,10 @@ const watchAMQOnline = (dispatch, username, namespace) =>
2323 poll ( addressSpaceDef ( namespace ) , 5000 , 2000 ) . then ( pollListener => {
2424 pollListener . onEvent ( event => {
2525 if ( ! event || ! event . metadata || ! event . metadata . name === cleanUsername ( username ) ) {
26- dispatch ( getPayloadFromAddressSpace ( event ) ) ;
26+ dispatch ( getPayloadFromAddressSpace ( event , username , namespace ) ) ;
2727 return ;
2828 }
29- const payload = getPayloadFromAddressSpace ( event ) ;
29+ const payload = getPayloadFromAddressSpace ( event , username , namespace ) ;
3030 payload . additionalAttributes = Object . assign ( { } , payload . additionalAttributes , {
3131 'enmasse-credentials-username' : cleanUsername ( username ) ,
3232 'enmasse-credentials-password' : window . atob ( genEvalPassword ( username ) )
@@ -81,7 +81,7 @@ const provisionAMQOnlineV4 = (dispatch, username, namespace, opts = getDefaultPr
8181 . then ( ( ) =>
8282 poll ( addressSpaceDef ( namespace ) ) . then ( pollListener => {
8383 pollListener . onEvent (
84- handleAddressSpaceUpdateEvent . bind ( null , username , dispatch , amqInfo => {
84+ handleAddressSpaceUpdateEvent . bind ( null , username , namespace , dispatch , amqInfo => {
8585 pollListener . clear ( ) ;
8686 dispatch ( {
8787 type : FULFILLED_ACTION ( middlewareTypes . PROVISION_SERVICE ) ,
@@ -139,24 +139,32 @@ const provisionAddressSpace = (username, namespace) => {
139139 return findOrCreateOpenshiftResource ( addressSpaceDef ( namespace ) , asRes ) ;
140140} ;
141141
142- const handleAddressSpaceUpdateEvent = ( username , dispatch , resolve , event ) => {
142+ const handleAddressSpaceUpdateEvent = ( username , namespace , dispatch , resolve , event ) => {
143143 if ( ! event || ! event . status || ! event . status . isReady ) {
144- dispatch ( getPayloadFromAddressSpace ( event ) ) ;
144+ dispatch ( getPayloadFromAddressSpace ( event , username , namespace ) ) ;
145145 return ;
146146 }
147147 const messagingEndpointDef = event . status . endpointStatuses . find ( e => e . name === 'messaging' ) ;
148148 if ( ! messagingEndpointDef ) {
149149 return ;
150150 }
151- const payload = getPayloadFromAddressSpace ( event ) ;
151+ const payload = getPayloadFromAddressSpace ( event , username , namespace ) ;
152152 payload . additionalAttributes = Object . assign ( { } , payload . additionalAttributes , {
153153 'enmasse-credentials-username' : cleanUsername ( username ) ,
154154 'enmasse-credentials-password' : window . atob ( genEvalPassword ( username ) )
155155 } ) ;
156156 resolve ( payload ) ;
157157} ;
158158
159- const getPayloadFromAddressSpace = as => {
159+ const buildAMQOnlineConcoleUrl = ( username , namespace , type ) => {
160+ if ( ! window . OPENSHIFT_CONFIG . provisionedServices . amqonline ) {
161+ return null ;
162+ }
163+ const baseUrl = `${ window . OPENSHIFT_CONFIG . provisionedServices . amqonline . Host } ` ;
164+ return `${ baseUrl } /#/address-spaces/${ namespace } /${ username } /${ type } /addresses` ;
165+ } ;
166+
167+ const getPayloadFromAddressSpace = ( as , username , namespace ) => {
160168 const payload = {
161169 type : SERVICE_TYPES . PROVISIONED_SERVICE ,
162170 name : DEFAULT_SERVICES . ENMASSE
@@ -171,13 +179,24 @@ const getPayloadFromAddressSpace = as => {
171179 if ( ! messagingEndpointDef ) {
172180 return null ;
173181 }
174- const consoleEndpointDef = as . status . endpointStatuses . find ( e => e . name === 'console' ) ;
182+ let consoleEndpointDef = as . status . endpointStatuses . find ( e => e . name === 'console' ) ;
175183 if ( ! consoleEndpointDef ) {
176- return null ;
184+ // If the host endpoint is not in the status, we can generate the URL from the
185+ // username and namespace
186+ const type = as . spec . type || 'standard' ;
187+ consoleEndpointDef = {
188+ externalHost : buildAMQOnlineConcoleUrl ( username , namespace , type )
189+ } ;
177190 }
191+
192+ const addressSpaceUrl =
193+ consoleEndpointDef . externalHost . indexOf ( 'https://' ) === 0
194+ ? `${ consoleEndpointDef . externalHost } `
195+ : `https://${ consoleEndpointDef . externalHost } ` ;
196+
178197 return Object . assign ( { } , payload , {
179198 status : SERVICE_STATUSES . PROVISIONED ,
180- url : `https:// ${ consoleEndpointDef . externalHost } ` ,
199+ url : addressSpaceUrl ,
181200 additionalAttributes : {
182201 'enmasse-broker-url' : messagingEndpointDef . serviceHost
183202 }
0 commit comments