Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
This repository was archived by the owner on Jan 20, 2021. It is now read-only.
8 changes: 7 additions & 1 deletion 8 public/config.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
{
"apiBase": "/client/api",
"servers": [
{
"name": "Local-Server",
"apiHost": "",
"apiBase": "/client/api"
}
],
"docBase": "http://docs.cloudstack.apache.org/en/latest",
"appTitle": "CloudStack",
"footer": "Licensed under the <a href='http://www.apache.org/licenses/' target='_blank'>Apache License</a>, Version 2.0.",
Expand Down
14 changes: 13 additions & 1 deletion 14 src/components/widgets/Console.vue
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<template>
<a
v-if="['vm', 'systemvm', 'router', 'ilbvm'].includes($route.meta.name) && 'updateVirtualMachine' in $store.getters.apis"
:href="'/client/console?cmd=access&vm=' + resource.id"
:href="server + '/client/console?cmd=access&vm=' + resource.id"
target="_blank">
<a-button style="margin-left: 5px" shape="circle" type="dashed" :size="size" :disabled="['Stopped', 'Error', 'Destroyed'].includes(resource.state)" >
<a-icon type="code" />
Expand All @@ -27,6 +27,9 @@
</template>

<script>
import Vue from 'vue'
import { SERVER_MANAGER } from '@/store/mutation-types'

export default {
name: 'Console',
props: {
Expand All @@ -38,6 +41,15 @@ export default {
type: String,
default: 'small'
}
},
computed: {
server () {
const serverStorage = Vue.ls.get(SERVER_MANAGER)
if (!serverStorage.apiHost || serverStorage.apiHost === '/') {
return location.origin
}
return serverStorage.apiHost
}
}
}
</script>
2 changes: 1 addition & 1 deletion 2 src/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ Vue.use(toLocaleDatePlugin)

fetch('config.json').then(response => response.json()).then(config => {
Vue.prototype.$config = config
Vue.axios.defaults.baseURL = config.apiBase
Vue.axios.defaults.baseURL = (config.servers[0].apiHost || '') + config.servers[0].apiBase

loadLanguageAsync().then(() => {
new Vue({
Expand Down
15 changes: 14 additions & 1 deletion 15 src/permission.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import 'nprogress/nprogress.css' // progress bar style
import message from 'ant-design-vue/es/message'
import notification from 'ant-design-vue/es/notification'
import { setDocumentTitle } from '@/utils/domUtil'
import { ACCESS_TOKEN, APIS } from '@/store/mutation-types'
import { ACCESS_TOKEN, APIS, SERVER_MANAGER } from '@/store/mutation-types'

NProgress.configure({ showSpinner: false }) // NProgress Configuration

Expand All @@ -39,6 +39,19 @@ router.beforeEach((to, from, next) => {
const title = i18n.t(to.meta.title) + ' - ' + Vue.prototype.$config.appTitle
setDocumentTitle(title)
}

const servers = Vue.prototype.$config.servers
const serverStorage = Vue.ls.get(SERVER_MANAGER)
let apiFullPath = ''
if (serverStorage) {
apiFullPath = (serverStorage.apiHost || '') + serverStorage.apiBase
}
const serverFilter = servers.filter(ser => (ser.apiHost || '') + ser.apiBase === apiFullPath)
const server = serverFilter[0] || servers[0]

Vue.axios.defaults.baseURL = (server.apiHost || '') + server.apiBase
store.dispatch('SetServer', server)

const validLogin = Vue.ls.get(ACCESS_TOKEN) || Cookies.get('userid') || Cookies.get('userid', { path: '/client' })
if (validLogin) {
if (to.path === '/user/login') {
Expand Down
1 change: 1 addition & 0 deletions 1 src/store/getters.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ const getters = {
cloudian: state => state.user.cloudian,
zones: state => state.user.zones,
timezoneoffset: state => state.user.timezoneoffset,
server: state => state.app.server,
usebrowsertimezone: state => state.user.usebrowsertimezone
}

Expand Down
11 changes: 10 additions & 1 deletion 11 src/store/modules/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import {
DEFAULT_FIXED_HEADER_HIDDEN,
DEFAULT_CONTENT_WIDTH_TYPE,
DEFAULT_MULTI_TAB,
SERVER_MANAGER,
USE_BROWSER_TIMEZONE
} from '@/store/mutation-types'

Expand All @@ -44,7 +45,8 @@ const app = {
color: null,
inverted: true,
multiTab: true,
metrics: false
metrics: false,
server: ''
},
mutations: {
SET_SIDEBAR_TYPE: (state, type) => {
Expand Down Expand Up @@ -97,6 +99,10 @@ const app = {
SET_METRICS: (state, bool) => {
state.metrics = bool
},
SET_SERVER: (state, server) => {
Vue.ls.set(SERVER_MANAGER, server)
state.server = server
},
SET_USE_BROWSER_TIMEZONE: (state, bool) => {
Vue.ls.set(USE_BROWSER_TIMEZONE, bool)
state.usebrowsertimezone = bool
Expand Down Expand Up @@ -145,6 +151,9 @@ const app = {
SetMetrics ({ commit }, bool) {
commit('SET_METRICS', bool)
},
SetServer ({ commit }, server) {
commit('SET_SERVER', server)
},
SetUseBrowserTimezone ({ commit }, bool) {
commit('SET_USE_BROWSER_TIMEZONE', bool)
}
Expand Down
1 change: 1 addition & 0 deletions 1 src/store/mutation-types.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export const APIS = 'APIS'
export const ZONES = 'ZONES'
export const ASYNC_JOB_IDS = 'ASYNC_JOB_IDS'
export const TIMEZONE_OFFSET = 'TIMEZONE_OFFSET'
export const SERVER_MANAGER = 'SERVER_MANAGER'
export const USE_BROWSER_TIMEZONE = 'USE_BROWSER_TIMEZONE'

export const CONTENT_WIDTH_TYPE = {
Expand Down
49 changes: 48 additions & 1 deletion 49 src/views/auth/Login.vue
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,23 @@
<a-icon type="safety" />
{{ $t('label.login.portal') }}
</span>
<a-form-item>
<a-select
size="large"
:placeholder="$t('server')"
v-decorator="[
'server',
{
initialValue: (server.apiHost || '') + server.apiBase
}
]"
@change="onChangeServer">
<a-select-option v-for="item in $config.servers" :key="(item.apiHost || '') + item.apiBase">
<a-icon slot="prefix" type="database" :style="{ color: 'rgba(0,0,0,.25)' }"></a-icon>
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item>
<a-input
size="large"
Expand Down Expand Up @@ -85,6 +102,23 @@
<a-icon type="audit" />
{{ $t('label.login.single.signon') }}
</span>
<a-form-item>
<a-select
size="large"
:placeholder="$t('server')"
v-decorator="[
'server',
{
initialValue: (server.apiHost || '') + server.apiBase
}
]"
@change="onChangeServer">
<a-select-option v-for="item in $config.servers" :key="(item.apiHost || '') + item.apiBase">
<a-icon slot="prefix" type="database" :style="{ color: 'rgba(0,0,0,.25)' }"></a-icon>
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item>
<a-select v-decorator="['idp', { initialValue: selectedIdp } ]">
<a-select-option v-for="(idp, idx) in idps" :key="idx" :value="idp.id">
Expand All @@ -110,8 +144,11 @@
</template>

<script>
import Vue from 'vue'
import { api } from '@/api'
import store from '@/store'
import { mapActions } from 'vuex'
import { SERVER_MANAGER } from '@/store/mutation-types'
import TranslationMenu from '@/components/header/TranslationMenu'

export default {
Expand All @@ -130,10 +167,12 @@ export default {
time: 60,
loginBtn: false,
loginType: 0
}
},
server: ''
}
},
created () {
this.server = Vue.ls.get(SERVER_MANAGER) || this.$config.servers[0]
},
mounted () {
this.fetchData()
Expand Down Expand Up @@ -178,6 +217,9 @@ export default {

validateFields(validateFieldsKey, { force: true }, (err, values) => {
if (!err) {
this.axios.defaults.baseURL = (this.server.apiHost || '') + this.server.apiBase
store.dispatch('SetServer', this.server)

if (customActiveKey === 'cs') {
const loginParams = { ...values }
delete loginParams.username
Expand Down Expand Up @@ -218,6 +260,11 @@ export default {
} else {
this.$message.error(this.$t('message.login.failed'))
}
},
onChangeServer (server) {
const servers = this.$config.servers || []
const serverFilter = servers.filter(ser => (ser.apiHost || '') + ser.apiBase === server)
this.server = serverFilter[0] || {}
}
}
}
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.