🎮 Add platform configuration for new gaming systems
This commit is contained in:
114
code/websites/pokedex.online/src/config/platforms.js
Normal file
114
code/websites/pokedex.online/src/config/platforms.js
Normal file
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
* Platform Registry
|
||||
*
|
||||
* Centralized configuration for OAuth providers and authentication methods
|
||||
* Supports: Challonge (OAuth, API Key, Client Credentials), Discord (OAuth)
|
||||
*
|
||||
* Add new platforms by extending PLATFORMS object with name, label, icon, and auth methods
|
||||
*/
|
||||
|
||||
export const PLATFORMS = {
|
||||
challonge: {
|
||||
name: 'challonge',
|
||||
label: 'Challonge',
|
||||
icon: '🏆',
|
||||
description: 'Tournament management and API access',
|
||||
helpUrl: 'https://challonge.com/settings/developer',
|
||||
auth: {
|
||||
apiKey: {
|
||||
enabled: true,
|
||||
label: 'API Key',
|
||||
description: 'Direct API key authentication for v1 and v2.1',
|
||||
storageKey: 'challonge_api_key'
|
||||
},
|
||||
oauth: {
|
||||
enabled: true,
|
||||
label: 'OAuth 2.0',
|
||||
description: 'User token authentication for v2.1 API',
|
||||
endpoint: 'https://api.challonge.com/oauth/authorize',
|
||||
tokenEndpoint: '/api/oauth/token',
|
||||
refreshEndpoint: '/api/oauth/refresh',
|
||||
scopes: ['tournaments:read', 'tournaments:write'],
|
||||
storageKey: 'challonge_oauth_tokens'
|
||||
},
|
||||
clientCredentials: {
|
||||
enabled: true,
|
||||
label: 'Client Credentials',
|
||||
description: 'For APPLICATION scope access',
|
||||
tokenEndpoint: 'https://api.challonge.com/oauth/token',
|
||||
storageKey: 'challonge_client_credentials'
|
||||
}
|
||||
}
|
||||
},
|
||||
discord: {
|
||||
name: 'discord',
|
||||
label: 'Discord',
|
||||
icon: '🎮',
|
||||
description: 'Personal identity verification and access control',
|
||||
helpUrl: 'https://discord.com/developers/applications',
|
||||
auth: {
|
||||
oauth: {
|
||||
enabled: true,
|
||||
label: 'OAuth 2.0',
|
||||
description: 'Verify your Discord identity',
|
||||
endpoint: 'https://discord.com/api/oauth2/authorize',
|
||||
tokenEndpoint: '/api/oauth/token',
|
||||
refreshEndpoint: '/api/oauth/refresh',
|
||||
scopes: ['identify'],
|
||||
storageKey: 'discord_oauth_tokens',
|
||||
userEndpoint: 'https://discord.com/api/users/@me'
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get platform configuration by name
|
||||
* @param {string} name - Platform name (e.g., 'challonge', 'discord')
|
||||
* @returns {Object} Platform configuration or throws error if not found
|
||||
*/
|
||||
export function getPlatform(name) {
|
||||
const platform = PLATFORMS[name];
|
||||
if (!platform) {
|
||||
throw new Error(`Platform not found: ${name}`);
|
||||
}
|
||||
return platform;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all platforms
|
||||
* @returns {Object[]} Array of all platform configurations
|
||||
*/
|
||||
export function getAllPlatforms() {
|
||||
return Object.values(PLATFORMS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a platform has a specific auth method
|
||||
* @param {string} platformName - Platform name
|
||||
* @param {string} methodName - Auth method name (e.g., 'oauth', 'apiKey')
|
||||
* @returns {boolean} True if method is enabled
|
||||
*/
|
||||
export function hasAuthMethod(platformName, methodName) {
|
||||
try {
|
||||
const platform = getPlatform(platformName);
|
||||
return platform.auth[methodName]?.enabled === true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get auth method configuration
|
||||
* @param {string} platformName - Platform name
|
||||
* @param {string} methodName - Auth method name
|
||||
* @returns {Object} Auth method configuration
|
||||
*/
|
||||
export function getAuthMethod(platformName, methodName) {
|
||||
const platform = getPlatform(platformName);
|
||||
const method = platform.auth[methodName];
|
||||
if (!method || !method.enabled) {
|
||||
throw new Error(`Auth method not found: ${platformName}.${methodName}`);
|
||||
}
|
||||
return method;
|
||||
}
|
||||
Reference in New Issue
Block a user