first commit

This commit is contained in:
编码猿
2024-09-27 02:06:13 +08:00
commit 852d94fbb9
36760 changed files with 3274413 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
import crypto from "crypto-js";
export class uploadOssHelper {
accessKeyId: string = "";
accessKeySecret: string = "";
timeout: number;
maxSize: number;
constructor(options: {
accessKeyId: string,
accessKeySecret: string,
timeout?: number,
maxSize?: number
}) {
this.accessKeyId = options.accessKeyId;
this.accessKeySecret = options.accessKeySecret;
// 限制参数的生效时间,单位为小时,默认值为1。
this.timeout = options.timeout || 1;
// 限制上传文件的大小,单位为MB,默认值为10。
this.maxSize = options.maxSize || 10;
}
createUploadParams() {
const policy = this.getPolicyBase64();
const signature = this.signature(policy);
return {
OSSAccessKeyId: this.accessKeyId,
policy: policy,
Signature: signature,
};
}
getPolicyBase64() {
let date = new Date();
// 设置policy过期时间。
date.setHours(date.getHours() + this.timeout);
let srcT = date.toISOString();
const policyText = {
expiration: srcT,
conditions: [
// 限制上传文件大小。
["content-length-range", 0, this.maxSize * 1024 * 1024],
],
};
const buffer = new Buffer(JSON.stringify(policyText));
return buffer.toString("base64");
}
signature(policy: string) {
return crypto.enc.Base64.stringify(
crypto.HmacSHA1(policy, this.accessKeySecret)
);
}
}

View File

@@ -0,0 +1,27 @@
import { Action } from 'routing-controllers';
import JsonwebToken, { VerifyErrors, JwtPayload } from 'jsonwebtoken'
import config from '@/config'
import { JsonResult, msgList } from '@/utils/jsonResult';
/**
* Token检验的装饰器代码实现
*/
export class AuthorizationChecker {
json: JsonResult<null> = new JsonResult
async check(action: Action, roles: string[]): Promise<boolean> {
if (action.request.headers.hasOwnProperty("token")) {
const token = action.request.headers['token'];
return new Promise<boolean>((success: (value: boolean | PromiseLike<boolean>) => void) => {
JsonwebToken.verify( token, config.jwtKey, (err: VerifyErrors | null, decoded: JwtPayload | undefined | string) =>{
if(err){
throw this.json.error(null,msgList.DecodedTokenError)
}else{
action.request.headers['token'] = decoded
success(true)
}
});
})
}
throw this.json.error(null,msgList.NoFoundToken)
}
}

View File

@@ -0,0 +1,98 @@
import { Inject, Service } from 'typedi';
export enum codeList {
Success = 200,
Error = 500,
NoFound = 404
}
export enum msgList {
Success = "请求成功",
Error = "请求成功",
NoFound = "未找到用户",
NoFounddelet = "此选项不存在",
SystemError = "系统错误",
DeleteSuccess = "删除成功",
NoFoundToken = "缺少token",
DecodedTokenError = "解密token失败",
PasswordError = "用户密码错误,请检查",
UserNameExist = "用户名已存在,请改名",
addUserSuccess = "注册成功",
pushMessageSuccess = "发布成功",
Essayadd="文章发布成功",
Essayupdata="修改成功",
add="添加成功",
sions="权限不够"
}
export interface res<T> {
code: number;
msg: string;
data: T;
}
@Service()
export class JsonResult<T> {
// 状态码
private _code!: number;
// 错误的中文信息
private _msg!: string;
// 接口数据
private _data!: T;
private _pagemax!:number;
public get code(): number {
return this._code;
}
public set code(value: number) {
this._code = value;
}
public get msg(): string {
return this._msg;
}
public set msg(value: string) {
this._msg = value;
}
public get data(): T {
return this._data;
}
public set data(value: T) {
this._data = value;
}
public get pagemax(): number {
return this._pagemax;
}
public set pagemax(value:number) {
this._pagemax = value;
}
success<U extends T>(data: U, msg?: string, code?: number ,pagemax?:number) {
this.code = code || codeList.Success;
this.msg = msg || msgList.Success;
this.data = data;
this.pagemax= pagemax||1
return {
code: this.code,
msg: this.msg,
data: this.data,
pagemax:this.pagemax
}
}
error<U extends T>(data: U, msg?: string, code?: number) {
this.code = code || codeList.Error;
this.msg = msg || msgList.SystemError;
this.data = data;
return {
code: this.code,
msg: this.msg,
data: this.data,
}
}
}

View File

@@ -0,0 +1,22 @@
import log4 from 'koa-log4'
import config from '@/config'
log4.configure(config.logConfig)
export class Log {
/**
* 系统级日志
*/
public static AccessLogger() {
return log4.koaLogger(log4.getLogger('access'), { level: 'auto' });
}
/**
* 应用级别的日志
* @constructor
*/
public static ApplicationLogger() {
return log4.getLogger('application')
}
}

View File

@@ -0,0 +1,26 @@
import { EntityTarget, ObjectLiteral, DataSource, Repository, EntityManager, QueryRunner, SelectQueryBuilder } from "typeorm";
import config from '@/config'
import { Service } from 'typedi'
@Service()
export class Entity {
// 使用 存储库 查询
get<T extends ObjectLiteral>(entity: EntityTarget<T>): Repository<T> {
return (<DataSource><unknown>config.orm).getRepository(entity)
}
// 基于 实体管理器 创建 QueryBuilder
manager<T extends ObjectLiteral>(entity: EntityTarget<T> | any): SelectQueryBuilder<T> {
return (<DataSource><unknown>config.orm).manager.createQueryBuilder(entity,entity.name.toLowerCase())
}
// 基于 数据源 创建 QueryBuilder
source(queryRunner?: QueryRunner): SelectQueryBuilder<any> {
return (<DataSource><unknown>config.orm).createQueryBuilder(queryRunner)
}
// 基于 存储库 使用 QueryBuilder
repository<T extends ObjectLiteral>(entity: EntityTarget<T> | any): SelectQueryBuilder<ObjectLiteral> {
return (<DataSource><unknown>config.orm).getRepository(entity).createQueryBuilder(entity.name.toLowerCase())
}
}

View File

@@ -0,0 +1,16 @@
//@ts-ignore
import segment from 'segment'
import { Service, Inject } from 'typedi'
@Service()
export class Segment {
seg: segment;
constructor() {
this.seg = new segment()
this.seg.useDefault();
}
ik(text: string): { w: string, p: number }[] {
return this.seg.doSegment(text)
}
}