/* global process, window */ // Copyright 2018 Red Hat, Inc // // Licensed under the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain // a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // 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. import Axios from 'axios' function getHomepageUrl (url) { // // Discover serving location from href. // // This is only needed for sub-directory serving. // Serving the application from '/' may simply default to '/' // // Note that this is not enough for sub-directory serving, // The static files location also needs to be adapted with the 'homepage' // settings of the package.json file. // // This homepage url is used for the Router and Link resolution logic // let baseUrl if (url) { baseUrl = url } else { baseUrl = window.location.href } // Get dirname of the current url baseUrl = baseUrl.replace(/\\/g, '/').replace(/\/[^/]*$/, '/') // Remove any query strings if (baseUrl.includes('?')) { baseUrl = baseUrl.slice(0, baseUrl.lastIndexOf('?')) } // Remove any hash anchor if (baseUrl.includes('/#')) { baseUrl = baseUrl.slice(0, baseUrl.lastIndexOf('/#') + 1) } // Remove known sub-path const subDir = [ '/build/', '/job/', '/project/', '/stream/', ] subDir.forEach(path => { if (baseUrl.includes(path)) { baseUrl = baseUrl.slice(0, baseUrl.lastIndexOf(path) + 1) } }) // Remove tenant scope if (baseUrl.includes('/t/')) { baseUrl = baseUrl.slice(0, baseUrl.lastIndexOf('/t/') + 1) } if (! baseUrl.endsWith('/')) { baseUrl = baseUrl + '/' } // console.log('Homepage url is ', baseUrl) return baseUrl } function getZuulUrl () { // Return the zuul root api absolute url const ZUUL_API = process.env.REACT_APP_ZUUL_API let apiUrl if (ZUUL_API) { // Api url set at build time, use it apiUrl = ZUUL_API } else { // Api url is relative to homepage path apiUrl = getHomepageUrl () + 'api/' } if (! apiUrl.endsWith('/')) { apiUrl = apiUrl + '/' } if (! apiUrl.endsWith('/api/')) { apiUrl = apiUrl + 'api/' } // console.log('Api url is ', apiUrl) return apiUrl } const apiUrl = getZuulUrl() function getStreamUrl (apiPrefix) { const streamUrl = (apiUrl + apiPrefix) .replace(/(http)(s)?:\/\//, 'ws$2://') + 'console-stream' // console.log('Stream url is ', streamUrl) return streamUrl } // Direct APIs function fetchInfo () { return Axios.get(apiUrl + 'info') } function fetchTenants () { return Axios.get(apiUrl + 'tenants') } function fetchConfigErrors (apiPrefix) { return Axios.get(apiUrl + apiPrefix + 'config-errors') } function fetchStatus (apiPrefix) { return Axios.get(apiUrl + apiPrefix + 'status') } function fetchBuild (apiPrefix, buildId) { return Axios.get(apiUrl + apiPrefix + 'build/' + buildId) } function fetchBuilds (apiPrefix, queryString) { let path = 'builds' if (queryString) { path += '?' + queryString.slice(1) } return Axios.get(apiUrl + apiPrefix + path) } function fetchJob (apiPrefix, jobName) { return Axios.get(apiUrl + apiPrefix + 'job/' + jobName) } function fetchJobs (apiPrefix) { return Axios.get(apiUrl + apiPrefix + 'jobs') } export { getHomepageUrl, getStreamUrl, fetchConfigErrors, fetchStatus, fetchBuild, fetchBuilds, fetchJob, fetchJobs, fetchTenants, fetchInfo }