mirror of
https://github.com/certd/certd.git
synced 2026-04-12 03:10:55 +08:00
fix: 修复偶尔下载证书报未授权的错误
This commit is contained in:
@@ -12,8 +12,8 @@
|
||||
</template>
|
||||
<div class="rounded pl-3 pr-3 px-2 py-1 flex-center flex pointer items-center bg-accent h-10 button-text" title="当前项目">
|
||||
<!-- <fs-icon icon="ion:apps" class="mr-1"></fs-icon> -->
|
||||
<fs-icon :icon="currentIcon" class="mr-5"></fs-icon>
|
||||
当前项目:{{ projectStore.currentProject?.name || "..." }}
|
||||
<fs-icon :icon="currentIcon" class="ml-5"></fs-icon>
|
||||
</div>
|
||||
</a-dropdown>
|
||||
</template>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<a-tag color="green" class="flex-center flex pointer items-center button-text" title="当前项目">
|
||||
<!-- <fs-icon icon="ion:apps" class="mr-1"></fs-icon> -->
|
||||
<fs-icon :icon="currentIcon" class="mr-5"></fs-icon>
|
||||
当前项目:{{ projectStore.currentProject?.name || "..." }}
|
||||
<fs-icon :icon="currentIcon" class="ml-5"></fs-icon>
|
||||
</a-tag>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import { useCertUpload } from "/@/views/certd/pipeline/cert-upload/use";
|
||||
import { useSettingStore } from "/@/store/settings";
|
||||
import { useProjectStore } from "/@/store/project";
|
||||
import { useDicts } from "../../dicts";
|
||||
import { useUserStore } from "/@/store/user";
|
||||
|
||||
export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet {
|
||||
const { t } = useI18n();
|
||||
@@ -39,6 +40,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
|
||||
const { myProjectDict } = useDicts();
|
||||
const settingStore = useSettingStore();
|
||||
const projectStore = useProjectStore();
|
||||
const userStore = useUserStore();
|
||||
const model = useModal();
|
||||
const viewCert = async (row: any) => {
|
||||
const cert = await api.GetCert(row.id);
|
||||
@@ -140,7 +142,12 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
|
||||
notification.error({ message: t("certd.certificateNotGenerated") });
|
||||
return;
|
||||
}
|
||||
window.open("/api/monitor/cert/download?id=" + row.id);
|
||||
let url = "/api/monitor/cert/download?id=" + row.id;
|
||||
if (projectStore.isEnterprise) {
|
||||
url += `&projectId=${projectStore.currentProject?.id}`;
|
||||
}
|
||||
url += `&token=${userStore.getToken}`;
|
||||
window.open(url);
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -3,8 +3,12 @@ import { notification } from "ant-design-vue";
|
||||
import CertView from "/@/views/certd/pipeline/cert-view.vue";
|
||||
import { env } from "/@/utils/util.env";
|
||||
import { useModal } from "/@/use/use-modal";
|
||||
import { useProjectStore } from "/@/store/project";
|
||||
import { useUserStore } from "/@/store/user";
|
||||
|
||||
export function useCertViewer() {
|
||||
const projectStore = useProjectStore();
|
||||
const userStore = useUserStore();
|
||||
const model = useModal();
|
||||
const viewCert = async (id: number) => {
|
||||
const cert = await api.GetCert(id);
|
||||
@@ -33,7 +37,11 @@ export function useCertViewer() {
|
||||
content: () => {
|
||||
const children = [];
|
||||
for (const file of files) {
|
||||
const downloadUrl = `${env.API}/pi/history/download?pipelineId=${id}&fileId=${file.id}`;
|
||||
let downloadUrl = `${env.API}/pi/history/download?pipelineId=${id}&fileId=${file.id}`;
|
||||
if (projectStore.isEnterprise) {
|
||||
downloadUrl += `&projectId=${projectStore.currentProject?.id}`;
|
||||
}
|
||||
downloadUrl += `&token=${userStore.getToken}`;
|
||||
children.push(
|
||||
<div>
|
||||
<div class={"flex-o m-5"}>
|
||||
|
||||
@@ -40,9 +40,7 @@ export class LoginController extends BaseController {
|
||||
}
|
||||
|
||||
private writeTokenCookie(token: { expire: any; token: any }) {
|
||||
this.ctx.cookies.set("certd_token", token.token, {
|
||||
maxAge: 1000 * token.expire
|
||||
});
|
||||
// this.loginService.writeTokenCookie(this.ctx,token);
|
||||
}
|
||||
|
||||
@Post('/loginBySms', { summary: Constants.per.guest })
|
||||
|
||||
@@ -70,6 +70,8 @@ export class ConnectController extends BaseController {
|
||||
})
|
||||
return this.ok({ loginUrl, ticket });
|
||||
}
|
||||
|
||||
|
||||
@Get('/callback/:type', { summary: Constants.per.guest })
|
||||
public async callback(@Param('type') type: string, @Query() query: Record<string, string>) {
|
||||
|
||||
@@ -154,10 +156,15 @@ export class ConnectController extends BaseController {
|
||||
});
|
||||
}
|
||||
|
||||
this.writeTokenCookie(loginRes);
|
||||
//返回登录成功token
|
||||
return this.ok(loginRes);
|
||||
}
|
||||
|
||||
private writeTokenCookie(token: { expire: any; token: any }) {
|
||||
// this.loginService.writeTokenCookie(this.ctx,token);
|
||||
}
|
||||
|
||||
|
||||
@Post('/autoRegister', { summary: Constants.per.guest })
|
||||
public async autoRegister(@Body(ALL) body: { validationCode: string, type: string }) {
|
||||
@@ -183,6 +190,7 @@ export class ConnectController extends BaseController {
|
||||
});
|
||||
|
||||
const loginRes = await this.loginService.generateToken(newUser);
|
||||
this.writeTokenCookie(loginRes);
|
||||
return this.ok(loginRes);
|
||||
}
|
||||
|
||||
|
||||
@@ -162,12 +162,15 @@ export class CertInfoController extends CrudController<CertInfoService> {
|
||||
|
||||
@Get('/download', { summary: Constants.per.authOnly })
|
||||
async download(@Query('id') id: number) {
|
||||
await this.checkOwner(this.getService(),id,"read");
|
||||
const {userId,projectId} =await this.checkOwner(this.getService(),id,"read");
|
||||
const certInfo = await this.getService().info(id)
|
||||
if (certInfo == null) {
|
||||
throw new CommonException('file not found');
|
||||
}
|
||||
if (certInfo.userId !== this.getUserId()) {
|
||||
if (certInfo.userId !== userId) {
|
||||
throw new CommonException('file not found');
|
||||
}
|
||||
if (projectId && certInfo.projectId !== projectId) {
|
||||
throw new CommonException('file not found');
|
||||
}
|
||||
// koa send file
|
||||
|
||||
@@ -241,7 +241,7 @@ export class HistoryController extends CrudController<HistoryService> {
|
||||
history = await this.service.getLastHistory(pipelineId);
|
||||
}
|
||||
if (history == null) {
|
||||
throw new CommonException('historyId is null');
|
||||
throw new CommonException('流水线还未运行过');
|
||||
}
|
||||
const {projectId} = await this.getProjectUserIdRead()
|
||||
if (projectId) {
|
||||
|
||||
@@ -199,6 +199,12 @@ export class LoginService {
|
||||
return this.generateToken(info);
|
||||
}
|
||||
|
||||
writeTokenCookie(ctx:any,token: { expire: any; token: any }) {
|
||||
ctx.cookies.set("certd_token", token.token, {
|
||||
maxAge: 1000 * token.expire
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 生成token
|
||||
|
||||
@@ -842,7 +842,8 @@ export class PipelineService extends BaseService<PipelineEntity> {
|
||||
.addSelect("count(1)", "count")
|
||||
.where({
|
||||
userId: param.userId,
|
||||
projectId: param.projectId
|
||||
projectId: param.projectId,
|
||||
isTemplate: false
|
||||
})
|
||||
.groupBy("status")
|
||||
.getRawMany();
|
||||
@@ -856,7 +857,8 @@ export class PipelineService extends BaseService<PipelineEntity> {
|
||||
.addSelect("count(1)", "count")
|
||||
.where({
|
||||
userId: param.userId,
|
||||
projectId: param.projectId
|
||||
projectId: param.projectId,
|
||||
isTemplate: false
|
||||
})
|
||||
.groupBy("disabled")
|
||||
.getRawMany();
|
||||
@@ -880,7 +882,8 @@ export class PipelineService extends BaseService<PipelineEntity> {
|
||||
where: {
|
||||
userId,
|
||||
disabled: false,
|
||||
projectId
|
||||
projectId,
|
||||
isTemplate: false
|
||||
}
|
||||
});
|
||||
await this.fillLastVars(list);
|
||||
@@ -902,7 +905,8 @@ export class PipelineService extends BaseService<PipelineEntity> {
|
||||
.addSelect("COUNT(1) AS count")
|
||||
.where({
|
||||
// 0点
|
||||
createTime: MoreThan(todayEnd.add(-param.days, "day").toDate())
|
||||
createTime: MoreThan(todayEnd.add(-param.days, "day").toDate()),
|
||||
isTemplate: false
|
||||
})
|
||||
.groupBy("date")
|
||||
.getRawMany();
|
||||
|
||||
Reference in New Issue
Block a user