Commit ca96edac by 蒋勇

d

parent 9cb6ccca
......@@ -116,6 +116,8 @@ class UserDao extends Dao{
var self=this;
var u2=await this.preCreate(u);
if(t){
console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
console.log(u2);
return this.model.create(u2,{transaction: t}).then(user=>{
return user;
});
......
......@@ -34,7 +34,9 @@ module.exports = (db, DataTypes) => {
type:DataTypes.BOOLEAN,
defaultValue: false
},
center_id:DataTypes.INTEGER,
center_id:DataTypes.STRING,
jwtkey:DataTypes.STRING,
jwtsecret:DataTypes.STRING,
isEnabled:{
type:DataTypes.BOOLEAN,
defaultValue: true
......
const system = require("../../../system");
const settings = require("../../../../config/settings");
const appconfig=system.getSysConfig();
module.exports = (db, DataTypes) => {
return db.define("app", {
appkey:{
type: DataTypes.STRING,
allowNull: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},//和user的from相同,在注册user时,去创建
domainName: DataTypes.STRING,//域名
backend:DataTypes.STRING,//域名
homePage: DataTypes.STRING,//首页
authUrl: DataTypes.STRING,//认证地址
docUrl: DataTypes.STRING,//接口文档地址
configUrl: DataTypes.STRING,//基础信息配置信息地址
logoUrl: DataTypes.STRING,//应用Logo
bkimageUrl: DataTypes.STRING,//应用背景图
showimgUrl: DataTypes.STRING,//应用显示图标
detailimgUrl: DataTypes.STRING,//应用详情介绍地址
opCacheUrl: DataTypes.STRING,//操作缓存地址
description: DataTypes.STRING,//应用描述
isSaas: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: true
},//是否启用
isEnabled: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
},//是否启用
isPublish: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
},//是否对外
isCommon: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
},//是否公共服务
appType: {
type: DataTypes.ENUM,
allowNull: true,
values: Object.keys(appconfig.pdict.app_type),
},
}, {
paranoid: true,//假的删除
underscored: true,
version: true,
freezeTableName: true,
//freezeTableName: true,
// define the table's name
tableName: 'p_app',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const ServiceBase = require("../../sve.base")
const settings = require("../../../../config/settings")
const jwt = require('jsonwebtoken');
class UserService extends ServiceBase {
constructor() {
super("auth", ServiceBase.getDaoName(UserService));
......@@ -9,11 +9,29 @@ class UserService extends ServiceBase {
//注册接口
//封装kongurl
async register(p,q){
var self=this;
p.password=this.getEncryptStr(p.password);
return this.db.transaction(async function (t) {
let u=await this.dao.create(p,t)
let u=await self.dao.create(p,t)
//创建统一账号
let cred=await self.cregister(u.userName)
console.log("......................................");
console.log(cred.consumer.id);
if(cred){
u.center_id=cred.consumer.id;
u.jwtkey=cred.key;
u.jwtsecret=cred.secret;
try{
await u.save({transaction:t});
}catch(e){
console.log(e);
await self.cunregister(p.userName);
throw new Error("保存用户失败");
}
return u;
}else{
throw new Error("创建统一账号失败");
}
});
}
......@@ -24,21 +42,39 @@ class UserService extends ServiceBase {
//创建统一账号
async cregister(uname){
try{
var rtn2=null;
let rtn=await system.post3wFormTypeReq(settings.kongurl+"consumers",{username:uname})
if(rtn.statusCode==409){
return new Error("已经存在相同的统一账号名称!");
//return new Error("已经存在相同的统一账号名称!");
return null;
}else{
//创建身份
rtn2=await system.post3wFormTypeReq(settings.kongurl+"consumers/"+uname+"/jwt")
}
if(rtn.statusCode==201){
return rtn.data;
if(rtn.statusCode==201 && rtn2.statusCode==201){
return rtn2.data;
}
return null;
}catch(e){
return null;
}
}
//创建jwt身份凭证
async cbindcredential(uname){
async jwtsign(plkey,secretstr,opts){
let promise=new Promise(function(resv,rej){
jwt.sign({ iss: plkey },secretstr,opts,function(err,rtn){
if(err){
rej(err);
}else{
resv(rtn);
}
});
});
return promise;
}
//只要登录 生成新的访问jwttoken
async cmakejwt(uname,opts){
var token =await this.jwtsign('a36c3049b36249a3c9f8891cb127243c', 'e71829c351aa4242c2719cbfbe671c09',opts);
return token;
}
//删除统一账号
......@@ -66,10 +102,14 @@ class UserService extends ServiceBase {
}
module.exports = UserService;
(async ()=>{
let u=new UserService();
// let x=await u.cregister("jiangong")
// console.log(x)
// let x=await u.cunregister("jiangong")
// console.log(x)
})()
\ No newline at end of file
// (async ()=>{
// let u=new UserService();
// // let x=await u.cregister("jiangong")
// // console.log(x)
// // let x=await u.cunregister("jiangong")
// // console.log(x)
// // let t=await u.cmakejwt()
// // console.log(t)
// let ux=u.register({userName:"jiangyong2",password:"123"})
// console.log(ux);
// })()
\ No newline at end of file
......@@ -5,9 +5,7 @@ const appconfig = system.getSysConfig();
class AppService extends ServiceBase {
constructor() {
super("common", ServiceBase.getDaoName(AppService));
//this.appDao=system.getObject("db.appDao");
this.userS = system.getObject("service.auth.userSve");
this.tradeD = system.getObject("db.common.apitradeDao");
}
async getApp(appkey) {
return this.cacheManager["AppCache"].cache(appkey, null);
......@@ -44,29 +42,86 @@ class AppService extends ServiceBase {
}
return dicRtn;
}
async resetPass(pobj) {
var appid = pobj.appid;
var uobj = { password: pobj.password }
return await this.userS.dao.model.update(uobj, { where: { userName: pobj.userName, app_id: pobj.appid } });
}
async createAdminUser(pobj) {
var u = { userName: pobj.userName, password: pobj.password, app_id: pobj.appid, isAdmin: true, mobile: pobj.mobile };
var rtn = await this.userS.register(u);
return rtn;
}
//创建应用
async create(pobj, qobj, req) {
var self = this;
return this.db.transaction(async function (t) {
var app = await self.dao.create(pobj, t);
//创建role
const Role = self.db.models.role;
//to do 由于有了租户的概念,所以目前不能创建属于特定租户的角色,进入后台后应该可以获取当前租户信息
// await Role.create(
// { name: "普通", code: "common", isSystem: 1, app_id: app.id }, { transaction: t }
// );
//创建后台应用服务
let svobj=await self.cregisterservice({name:app.name,url:"http://"+app.backend})
if(svobj){
try{
app.appkey=svobj.id;
await app.save({transaction:t});
}catch(e){
await self.cdelservice(app.name)
}
}else{
throw new Error("创建应用服务失败");
}
return app;
});
}
//kong创建应用服务
async cregisterservice(opts){
try{
let rtn=await system.post3wFormTypeReq(settings.kongurl+"services",opts)
console.log(rtn);
if(rtn.statusCode==409){
//return new Error("已经存在相同的统一账号名称!");
return null;
}
if(rtn.statusCode==201){
return rtn.data;
}
return null;
}catch(e){
console.log(e);
return null;
}
}
//删除统一服务
async cdelservice(sname){
try{
let rtn=await system.delReq(settings.kongurl+"services/"+sname)
if(rtn.statusCode==204){
return {};
}
return null;
}catch(e){
return null;
}
}
async cregisterRouter(sname,opts){
try{
let rtn=await system.postJsonTypeReq(settings.kongurl+"services/"+sname+"/routes",opts)
if(rtn.statusCode==409){
//return new Error("已经存在相同的统一账号名称!");
return null;
}
if(rtn.statusCode==201){
return rtn.data;
}
return null;
}catch(e){
console.log(e);
return null;
}
}
//删除统一路由
async cdelroute(rname){
try{
let rtn=await system.delReq(settings.kongurl+"routes/"+rname)
console.log(rtn);
if(rtn.statusCode==204){
return {};
}
return null;
}catch(e){
return null;
}
}
async findAndCountAll(obj) {
var self = this;
const apps = await super.findAndCountAll(obj);
......@@ -79,47 +134,18 @@ class AppService extends ServiceBase {
}
return apps;
}
async recvNotificationForCacheCount(pobj) {
console.log(pobj);
return;
}
async fetchApiCallData(curappkey) {
//当前APP,呼出发生的调用次数和累积应付
//var apicallAccu= await this.cacheManager["ApiAccuCache"].getApiCallAccu(curappkey);
//当前APP,呼出发生的调用次数和累积应付
var apicallAccuCount = await this.tradeD.model.count({
where: {
srcappkey: curappkey,
tradeType: "consume",
}
});
var apicallAccuAmount = await this.tradeD.model.sum("amount", {
where: {
srcappkey: curappkey,
tradeType: "consume",
}
});
//当前APP对外提供服务,累积发生的调用次数及累积应收
var count = await this.tradeD.model.count({
where: {
destappkey: curappkey,
tradeType: "consume",
}
});
var amount = await this.tradeD.model.sum("amount", {
where: {
destappkey: curappkey,
}
});
var rtn = {
apioutcallcount: apicallAccuCount,
apioutcallamount: apicallAccuAmount,
apiincallcount: count,
apiincallamount: amount,
}
return rtn;
}
}
module.exports = AppService;
(async ()=>{
let u=new AppService();
// let x=await u.cregister("jiangong")
// console.log(x)
// let x=await u.cunregister("jiangong")
// console.log(x)
// let t=await u.cmakejwt()
// console.log(t)
// let ux=await u.cregisterRouter("test-service2",{name:"test-service2",hosts:["ttest1.com"]})
// // let ux=await u.cdelroute("test-service2")
// console.log(ux);
})()
\ No newline at end of file
......@@ -11,7 +11,7 @@ class ServiceBase {
this.restS = system.getObject("util.restClient");
this.md5 = require("MD5");
}
async getEncryptStr(str) {
getEncryptStr(str) {
if (!str) {
throw new Error("字符串不能为空");
}
......
......@@ -55,6 +55,7 @@ class System {
return promise;
}
static async postJsonTypeReq(url,data){
let rtn={}
let promise=new Promise(function(resv,rej){
request({
url: url,
......@@ -63,10 +64,16 @@ class System {
headers: {
"content-type": "application/json",
},
body: JSON.stringify(data)
body: data
}, function(error, response, body) {
if (!error && response.statusCode == 200) {
resv(body);
rtn.statusCode=response.statusCode
if (!error) {
if(body){
rtn.data=body
}else{
rtn.data=null
}
resv(rtn);
}else{
rej(error)
}
......
......@@ -32,6 +32,7 @@
"express": "^4.16.2",
"express-session": "^1.15.6",
"gm": "^1.23.1",
"jsonwebtoken": "^8.5.1",
"log4js": "^2.10.0",
"method-override": "^2.3.10",
"morgan": "^1.9.0",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment