shadowsocks-manager
Version:
A shadowsocks manager tool for multi user and traffic control.
99 lines (91 loc) • 2.82 kB
JavaScript
const app = angular.module('app');
app.factory('userApi', ['$q', '$http', ($q, $http) => {
let userAccountPromise = null;
const getUserAccount = () => {
if(userAccountPromise && !userAccountPromise.$$state.status) {
return userAccountPromise;
}
let account = null;
let servers = null;
userAccountPromise = $q.all([
$http.get('/api/user/account'),
$http.get('/api/user/server'),
]).then(success => {
return {
account: success[0].data,
servers: success[1].data.map(server => {
// if(server.host.indexOf(':') >= 0) {
// server.host = server.host.split(':')[1];
// }
return server;
}),
};
});
return userAccountPromise;
};
const changeShadowsocksPassword = (accountId, password) => {
return $http.put(`/api/user/${ accountId }/password`, {
password,
});
};
const changePassword = (password, newPassword) => {
return $http.post('/api/user/changePassword', {
password,
newPassword,
});
};
const updateAccount = account => {
if(!account.length) {
return $http.get('/api/user/account').then(success => {
success.data.forEach(a => {
account.push(a);
});
});
} else {
account.forEach((a, index) => {
$http.get(`/api/user/account/${ a.id }`).then(success => {
if(!success.data.id) {
account.splice(index, 1);
return;
}
a.password = success.data.password;
a.data = success.data.data;
a.type = success.data.type;
});
});
return $q.resolve();
}
};
let serverPortDataPromise = {};
const getServerPortData = (account, serverId) => {
if(serverPortDataPromise[`${ account.id }`] && !serverPortDataPromise[`${ account.id }`].$$state.status) {
return serverPortDataPromise[`${ account.id }`];
}
const Promises = [
$http.get(`/api/user/flow/${ serverId }/${ account.id }/lastConnect`),
];
if(account.type >= 2 && account.type <= 5) {
Promises.push(
$http.get(`/api/user/flow/${ serverId }/${ account.id }`)
);
}
serverPortDataPromise[`${ account.id }`] = $q.all(Promises).then(success => {
return {
lastConnect: success[0].data.lastConnect,
flow: success[1] ? success[1].data[0] : null,
};
});
return serverPortDataPromise[`${ account.id }`];
};
const getNotice = () => {
return $http.get('/api/user/notice').then(success => success.data);
};
return {
getServerPortData,
getUserAccount,
changeShadowsocksPassword,
changePassword,
updateAccount,
getNotice,
};
}]);