Make configuration validation sync
This commit is contained in:
parent
509089e5b7
commit
2f8c4a9ab3
57
src/api.ts
57
src/api.ts
@ -37,6 +37,7 @@ import {
|
|||||||
import {useStore} from "@/store";
|
import {useStore} from "@/store";
|
||||||
import ChatError from "@/errors/ChatError";
|
import ChatError from "@/errors/ChatError";
|
||||||
import {LiveAtlasDynmapServerDefinition, LiveAtlasServerDefinition} from "@/index";
|
import {LiveAtlasDynmapServerDefinition, LiveAtlasServerDefinition} from "@/index";
|
||||||
|
import ConfigurationError from "@/errors/ConfigurationError";
|
||||||
|
|
||||||
const titleColours = /§[0-9a-f]/ig;
|
const titleColours = /§[0-9a-f]/ig;
|
||||||
|
|
||||||
@ -555,12 +556,12 @@ function buildUpdates(data: Array<any>): DynmapUpdates {
|
|||||||
return updates;
|
return updates;
|
||||||
}
|
}
|
||||||
|
|
||||||
const validateLiveAtlasConfiguration = (config: any): Promise<Map<string, LiveAtlasServerDefinition>> => {
|
const validateLiveAtlasConfiguration = (config: any): Map<string, LiveAtlasServerDefinition> => {
|
||||||
const check = '\nCheck your server configuration in index.html is correct.',
|
const check = '\nCheck your server configuration in index.html is correct.',
|
||||||
result = new Map<string, LiveAtlasServerDefinition>();
|
result = new Map<string, LiveAtlasServerDefinition>();
|
||||||
|
|
||||||
if (!Object.keys(config).length) {
|
if (!Object.keys(config).length) {
|
||||||
return Promise.reject(`No servers defined in LiveAtlas configuration.`);
|
throw new ConfigurationError(`No servers defined. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const server in config) {
|
for (const server in config) {
|
||||||
@ -570,35 +571,35 @@ const validateLiveAtlasConfiguration = (config: any): Promise<Map<string, LiveAt
|
|||||||
|
|
||||||
const serverConfig = config[server];
|
const serverConfig = config[server];
|
||||||
|
|
||||||
|
if (!serverConfig || serverConfig.constructor !== Object || !Object.keys(serverConfig).length) {
|
||||||
|
throw new ConfigurationError(`Server '${server}': Configuration missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
serverConfig.id = server;
|
serverConfig.id = server;
|
||||||
serverConfig.type = 'dynmap';
|
serverConfig.type = 'dynmap';
|
||||||
|
|
||||||
if (!serverConfig || serverConfig.constructor !== Object) {
|
|
||||||
return Promise.reject(`Server '${server}' has an invalid configuration. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!serverConfig.dynmap || serverConfig.dynmap.constructor !== Object) {
|
if (!serverConfig.dynmap || serverConfig.dynmap.constructor !== Object) {
|
||||||
return Promise.reject(`Server '${server}' has an invalid configuration. ${check}`);
|
throw new ConfigurationError(`Server '${server}': Dynmap configuration object missing. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!serverConfig.dynmap.configuration) {
|
if (!serverConfig.dynmap.configuration) {
|
||||||
return Promise.reject(`Server '${server}' has no dynmap configuration URL. ${check}`);
|
throw new ConfigurationError(`Server '${server}': Dynmap configuration URL missing. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!serverConfig.dynmap.update) {
|
if (!serverConfig.dynmap.update) {
|
||||||
return Promise.reject(`Server '${server}' has no dynmap update URL. ${check}`);
|
throw new ConfigurationError(`Server '${server}': Dynmap update URL missing. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!serverConfig.dynmap.markers) {
|
if (!serverConfig.dynmap.markers) {
|
||||||
return Promise.reject(`Server '${server}' has no dynmap markers URL. ${check}`);
|
throw new ConfigurationError(`Server '${server}': Dynmap markers URL missing. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!serverConfig.dynmap.tiles) {
|
if (!serverConfig.dynmap.tiles) {
|
||||||
return Promise.reject(`Server '${server}' has no dynmap tiles URL. ${check}`);
|
throw new ConfigurationError(`Server '${server}': Dynmap tiles URL missing. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!serverConfig.dynmap.sendmessage) {
|
if (!serverConfig.dynmap.sendmessage) {
|
||||||
return Promise.reject(`Server '${server}' has no dynmap sendmessage URL. ${check}`);
|
throw new ConfigurationError(`Server '${server}': Dynmap sendmessage URL missing. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(serverConfig.url) {
|
if(serverConfig.url) {
|
||||||
@ -606,7 +607,7 @@ const validateLiveAtlasConfiguration = (config: any): Promise<Map<string, LiveAt
|
|||||||
a.href = serverConfig.url;
|
a.href = serverConfig.url;
|
||||||
|
|
||||||
if(a.origin !== window.location.origin) {
|
if(a.origin !== window.location.origin) {
|
||||||
return Promise.reject(`Server '${server}'s URL doesn't match LiveAtlas' origin. ${check}`);
|
throw new ConfigurationError(`Server '${server}': URL doesn't match LiveAtlas origin. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
serverConfig.url = a.pathname;
|
serverConfig.url = a.pathname;
|
||||||
@ -617,34 +618,34 @@ const validateLiveAtlasConfiguration = (config: any): Promise<Map<string, LiveAt
|
|||||||
result.set(server, serverConfig);
|
result.set(server, serverConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.resolve(result);
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
const validateDynmapConfiguration = (config: DynmapUrlConfig): Promise<Map<string, LiveAtlasDynmapServerDefinition>> => {
|
const validateDynmapConfiguration = (config: DynmapUrlConfig): Map<string, LiveAtlasDynmapServerDefinition> => {
|
||||||
const check = '\nCheck your standalone/config.js file exists and is being loaded correctly.';
|
const check = '\nCheck your standalone/config.js file exists and is being loaded correctly.';
|
||||||
|
|
||||||
if (!config) {
|
if (!config) {
|
||||||
return Promise.reject(`Dynmap configuration is missing. ${check}`);
|
throw new ConfigurationError(`Dynmap configuration is missing. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config.configuration) {
|
if (!config.configuration) {
|
||||||
return Promise.reject(`Dynmap configuration URL is missing. ${check}`);
|
throw new ConfigurationError(`Dynmap configuration URL is missing. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config.update) {
|
if (!config.update) {
|
||||||
return Promise.reject(`Dynmap update URL is missing. ${check}`);
|
throw new ConfigurationError(`Dynmap update URL is missing. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config.markers) {
|
if (!config.markers) {
|
||||||
return Promise.reject(`Dynmap markers URL is missing. ${check}`);
|
throw new ConfigurationError(`Dynmap markers URL is missing. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config.tiles) {
|
if (!config.tiles) {
|
||||||
return Promise.reject(`Dynmap tiles URL is missing. ${check}`);
|
throw new ConfigurationError(`Dynmap tiles URL is missing. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config.sendmessage) {
|
if (!config.sendmessage) {
|
||||||
return Promise.reject(`Dynmap sendmessage URL is missing. ${check}`);
|
throw new ConfigurationError(`Dynmap sendmessage URL is missing. ${check}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = new Map<string, LiveAtlasDynmapServerDefinition>();
|
const result = new Map<string, LiveAtlasDynmapServerDefinition>();
|
||||||
@ -655,7 +656,7 @@ const validateDynmapConfiguration = (config: DynmapUrlConfig): Promise<Map<strin
|
|||||||
dynmap: config
|
dynmap: config
|
||||||
});
|
});
|
||||||
|
|
||||||
return Promise.resolve(result);
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
async function fetchJSON(url: string) {
|
async function fetchJSON(url: string) {
|
||||||
@ -682,12 +683,16 @@ async function fetchJSON(url: string) {
|
|||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
validateConfiguration(): Promise<Map<string, LiveAtlasServerDefinition>> {
|
validateConfiguration(): Map<string, LiveAtlasServerDefinition> {
|
||||||
if (typeof window.liveAtlasConfig.servers !== 'undefined') {
|
if (!window.liveAtlasConfig) {
|
||||||
return validateLiveAtlasConfiguration(window.liveAtlasConfig.servers);
|
throw new ConfigurationError(`Configuration object is missing`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return validateDynmapConfiguration(window.config.url ?? null);
|
if (typeof window.liveAtlasConfig.servers !== 'undefined') {
|
||||||
|
return validateLiveAtlasConfiguration(window.liveAtlasConfig.servers || {});
|
||||||
|
}
|
||||||
|
|
||||||
|
return validateDynmapConfiguration(window.config?.url || null);
|
||||||
},
|
},
|
||||||
|
|
||||||
async getConfiguration(): Promise<DynmapConfigurationResponse> {
|
async getConfiguration(): Promise<DynmapConfigurationResponse> {
|
||||||
|
22
src/errors/ConfigurationError.ts
Normal file
22
src/errors/ConfigurationError.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2021 James Lyne
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export default class ConfigurationError extends Error {
|
||||||
|
constructor(message: string) {
|
||||||
|
super(message);
|
||||||
|
this.name = "ConfigurationError";
|
||||||
|
}
|
||||||
|
}
|
@ -85,7 +85,9 @@ window.showSplashError = function(message: string, fatal: boolean, attempts: num
|
|||||||
|
|
||||||
console.info(`LiveAtlas version ${store.state.version} - https://github.com/JLyne/LiveAtlas`);
|
console.info(`LiveAtlas version ${store.state.version} - https://github.com/JLyne/LiveAtlas`);
|
||||||
|
|
||||||
API.validateConfiguration().then((config) => {
|
try {
|
||||||
|
const config = API.validateConfiguration();
|
||||||
|
|
||||||
store.commit(MutationTypes.SET_SERVERS, config);
|
store.commit(MutationTypes.SET_SERVERS, config);
|
||||||
|
|
||||||
if(config.size > 1) {
|
if(config.size > 1) {
|
||||||
@ -106,7 +108,7 @@ API.validateConfiguration().then((config) => {
|
|||||||
|
|
||||||
// app.config.performance = true;
|
// app.config.performance = true;
|
||||||
app.mount('#app');
|
app.mount('#app');
|
||||||
}).catch(e => {
|
} catch(e) {
|
||||||
console.error('LiveAtlas configuration is invalid: ', e);
|
console.error('LiveAtlas configuration is invalid: ', e);
|
||||||
window.showSplashError('LiveAtlas configuration is invalid\n' + e, true);
|
window.showSplashError('LiveAtlas configuration is invalid\n' + e, true);
|
||||||
});
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user