i18n-management-cli
Version:
CLI tool for i18n management platform - import, export, and sync translations
96 lines (82 loc) • 2.25 kB
JavaScript
const Config = require('./config');
const ApiClient = require('./api');
/**
* 检查并验证用户认证状态
* @param {boolean} silent - 是否静默模式(不输出错误信息)
* @returns {Promise<boolean>} - 返回认证是否有效
*/
async function checkAuth(silent = false) {
try {
const config = new Config();
const token = config.get('token');
if (!token) {
if (!silent) {
console.error('❌ Authentication required');
console.log('💡 Please login first: i18n-cli login');
}
return false;
}
// 验证token是否有效
const apiClient = new ApiClient(config);
const userResponse = await apiClient.getCurrentUser();
if (userResponse.success) {
return true;
} else {
if (!silent) {
console.error('❌ Authentication token expired or invalid');
console.log('💡 Please login again: i18n-cli login');
}
// 清除无效token
config.set('token', '');
config.save();
return false;
}
} catch (error) {
if (!silent) {
console.error('❌ Authentication check failed:', error.message);
console.log('💡 Please login again: i18n-cli login');
}
// 清除可能无效的token
const config = new Config();
config.set('token', '');
config.save();
return false;
}
}
/**
* 需要认证的命令包装器
* 在执行命令前检查认证状态
*/
function requireAuth(commandHandler) {
return async function(...args) {
const isAuthenticated = await checkAuth();
if (!isAuthenticated) {
console.log('\n🔐 This command requires authentication.');
console.log('Please run: i18n-cli login');
process.exit(1);
}
// 认证通过,执行原始命令
return await commandHandler(...args);
};
}
/**
* 获取当前用户信息
*/
async function getCurrentUser() {
try {
const config = new Config();
const apiClient = new ApiClient(config);
const userResponse = await apiClient.getCurrentUser();
if (userResponse.success) {
return userResponse.user;
}
return null;
} catch {
return null;
}
}
module.exports = {
checkAuth,
requireAuth,
getCurrentUser
};