diff --git a/Dockerfile b/Dockerfile
index 3d933cbd2a5b5ac98ac26da68ef546a48c1fd172..7e344978d298f734642e13ea76c85b7f66cd3ef1 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -13,7 +13,7 @@ RUN ls /home/quick-isuue/web
FROM swr.cn-north-4.myhuaweicloud.com/opensourceway/openeuler/nginx:1.24.0-22.03-lts-sp1 as NginxBuilder
-FROM swr.cn-north-4.myhuaweicloud.com/opensourceway/website/openeuler:22.03-lts-sp1-latest
+FROM openeuler/openeuler:22.03
ENV NGINX_CONFIG_FILE /etc/nginx/nginx.conf
ENV NGINX_CONFIG_PATH /etc/nginx/
diff --git a/deploy/nginx/nginx.conf b/deploy/nginx/nginx.conf
index 17b1eb0400f2a2aafb7a60549e1b6afeb5e5aed8..87aec6c66a9b73d3d328acf67476f26fcf4263f5 100644
--- a/deploy/nginx/nginx.conf
+++ b/deploy/nginx/nginx.conf
@@ -42,8 +42,11 @@ http {
proxy_hide_header X-Powered-By;
proxy_request_buffering off;
- limit_conn_zone $binary_remote_addr zone=limitperip:10m;
- limit_req_zone $binary_remote_addr zone=ratelimit:10m rate=1000r/s;
+ real_ip_header X-Real-IP;
+
+ limit_conn_zone $http_x_real_ip zone=limitperip:10m;
+ limit_req_zone $http_x_real_ip zone=frontendratelimit:10m rate=1000r/s;
+ limit_req_zone $http_x_real_ip zone=ratelimit:10m rate=1000r/s;
gzip on;
gzip_min_length 1k;
@@ -96,10 +99,12 @@ http {
}
location / {
+ limit_req zone=frontendratelimit burst=2 nodelay;
proxy_set_header X-Forwarded-For $http_x_real_ip;
proxy_set_header Host $host;
location /assets {
+ limit_req zone=frontendratelimit burst=2 nodelay;
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
@@ -117,12 +122,14 @@ http {
}
location /api-dsapi/ {
+ limit_req zone=ratelimit burst=2 nodelay;
proxy_set_header X-Forwarded-For $http_x_real_ip;
proxy_pass https://dsapi.osinfra.cn/;
}
location /api-omapi/ {
+ limit_req zone=ratelimit burst=2 nodelay;
proxy_set_header X-Forwarded-For $http_x_real_ip;
proxy_pass https://omapi.test.osinfra.cn/;
@@ -130,9 +137,10 @@ http {
}
location /api-issues/ {
+ limit_req zone=ratelimit burst=2 nodelay;
proxy_set_header X-Forwarded-For $http_x_real_ip;
- proxy_pass https://quickissue-server.test.osinfra.cn/;
+ proxy_pass https://quickissue-server.test.osinfra.cn/;
}
diff --git a/src/api/api-quick-issue.ts b/src/api/api-quick-issue.ts
index 90aa0dc7a682b98dd9ccc5d3fa6cf4662e792c07..283e606c0526b2fbf8a6ea0fb1462529fcc8abb5 100644
--- a/src/api/api-quick-issue.ts
+++ b/src/api/api-quick-issue.ts
@@ -117,7 +117,7 @@ export function reqGet() {
*/
export function reqCheck(data: {
captcha_id: number;
- challenge: number;
+ challenge: string;
email: string;
}) {
const url = '/api-issues/verify/check';
diff --git a/src/components/AppVerify.vue b/src/components/AppVerify.vue
index 2fd7c7361f4758d92b300d4b11d284b3dfb85e27..8aa1471f5263f556cf563792d3642642d2f345f2 100644
--- a/src/components/AppVerify.vue
+++ b/src/components/AppVerify.vue
@@ -50,9 +50,13 @@ const { t, locale } = useI18n();
- {{
- t('quickIssue.VERIFY_CONFIRM')
- }}
+ {{ t('quickIssue.VERIFY_CONFIRM') }}
{{
t('quickIssue.VERIFY_CANCEL')
}}
diff --git a/src/config/index.ts b/src/config/index.ts
index bbff8ccc622550396cb969fd640a2366619cdf84..74e0311d53e909ac7efe9a2607dd0fb9bee42192 100644
--- a/src/config/index.ts
+++ b/src/config/index.ts
@@ -13,8 +13,6 @@ import LogoLinkedin from '@/assets/footer/linkedin@2x.png';
import LogoYoutube from '@/assets/footer/youtube@2x.png';
import LogoTwitter from '@/assets/footer/twitter@2x.png';
-
-
// 友情链接
export const linksData = {
zh: [
@@ -108,3 +106,6 @@ export const linksData2 = {
},
],
};
+
+export const defaultIssueRepo = 'openeuler/community-issue';
+export const defaultIssueRepoID = 7392228;
diff --git a/src/i18n/quick-issue/quick-issue-en.ts b/src/i18n/quick-issue/quick-issue-en.ts
index 293ad5062fe16acb618642c2ebf44400b9781aba..c61e68006b25a41f81945ed742838cea0cc9d655 100644
--- a/src/i18n/quick-issue/quick-issue-en.ts
+++ b/src/i18n/quick-issue/quick-issue-en.ts
@@ -46,7 +46,7 @@ export default {
MANDATORY: 'Mandatory',
MANDATORY1: 'Mandatory',
EMAIL_ADRESS: 'Enter an email address',
- TITLE_LIMIT: 'Title cannot exceed 100 characters',
+ TITLE_LIMIT: 'Title cannot exceed 191 characters',
RIGHT_EMAIL_ADRESS: 'Enter a valid email address',
VER_CODE: 'Enter the verification code',
VER_CODE1: 'Enter the 6-digit verification code',
@@ -63,7 +63,7 @@ export default {
VERIFY_FAIL: 'Verification failed.',
VERIFY_SUCCESS: 'Verification succeeds in',
VERIFY_TITLE: 'Please complete the verification code',
- VERIFY_PLH: 'Please enter the numbers in the image',
+ VERIFY_PLH: 'Please enter the characters in the image',
VERIFY_CONFIRM: 'Confirm',
VERIFY_CANCEL: 'Cancel',
};
diff --git a/src/i18n/quick-issue/quick-issue-zh.ts b/src/i18n/quick-issue/quick-issue-zh.ts
index 806148269bb799e6d6949e18e7473d54adb9b3e8..61a0b36710b7564a53cea7d6c7e95139952c5a15 100644
--- a/src/i18n/quick-issue/quick-issue-zh.ts
+++ b/src/i18n/quick-issue/quick-issue-zh.ts
@@ -46,7 +46,7 @@ export default {
SEND_CODE: '发送验证码',
MANDATORY: '必选项',
MANDATORY1: '必填项',
- TITLE_LIMIT: '标题长度不超过100字符',
+ TITLE_LIMIT: '标题长度不超过191字符',
EMAIL_ADRESS: '请填写邮箱',
RIGHT_EMAIL_ADRESS: '请输入正确格式邮箱',
VER_CODE: '请填写验证码',
@@ -62,7 +62,7 @@ export default {
VERIFY_FAIL: '验证失败',
VERIFY_SUCCESS: '验证成功',
VERIFY_TITLE: '请完成验证码',
- VERIFY_PLH: '请输入图片中的数字',
+ VERIFY_PLH: '请输入图片中的字符',
VERIFY_CONFIRM: '确定',
VERIFY_CANCEL: '取消',
};
diff --git a/src/shared/axios/index.ts b/src/shared/axios/index.ts
index df7a8d1153aab479eb8bac571dca4f1065c1544a..89c0f1d674ff3de3593a275a87e76dd81a8b928b 100644
--- a/src/shared/axios/index.ts
+++ b/src/shared/axios/index.ts
@@ -19,6 +19,9 @@ interface RequestConfig extends AxiosRequestConfig {
$doException?: boolean; // 是否弹出错误提示框
global?: boolean; // 是否为全局请求, 全局请求在清除请求池时,不清除
}
+interface ErrorResponse {
+ msg: string;
+}
// 全局loading
let loadingInstance: LoadingInstance | null = null;
@@ -135,9 +138,11 @@ const responseInterceptorId = request.interceptors.response.use(
}
const { config } = err;
if (!(config as RequestConfig).$doException) {
+ const response = err.response as AxiosResponse;
+ const message = response?.data?.msg || err.message;
ElMessage({
type: 'error',
- message: err.toString(),
+ message,
});
}
// 非取消请求发生异常,同样将请求移除请求池
diff --git a/src/shared/index.ts b/src/shared/index.ts
index fffcb5949bcc09ea2feca035eae666e76c1bec77..d91ffc12166da77aba4d86af63d8eab37afe4f4f 100644
--- a/src/shared/index.ts
+++ b/src/shared/index.ts
@@ -68,7 +68,7 @@ export const rules: any = reactive({
},
{
min: 1,
- max: 100,
+ max: 191,
message: t('quickIssue.TITLE_LIMIT'),
trigger: 'blur',
},
diff --git a/src/views/submit-issue/SubmitIssue.vue b/src/views/submit-issue/SubmitIssue.vue
index ac43cc1f631f924b5212497c970868485e1e3e28..f95714b63d17d85fa91815f3ca8cead64dd96ea6 100644
--- a/src/views/submit-issue/SubmitIssue.vue
+++ b/src/views/submit-issue/SubmitIssue.vue
@@ -23,6 +23,7 @@ import {
} from '@/api/api-quick-issue';
import { OptionList, IssueData } from '@/shared/@types/type-quick-issue';
+import { defaultIssueRepo, defaultIssueRepoID } from '@/config';
import { getSigLandscape } from '@/api/api-sig';
@@ -78,15 +79,19 @@ const totalTime = ref(60);
const tabType = ref(titleList.value[0].key);
const isGiteeUser = ref(false);
const clock = ref();
-const challenge = ref();
+const challenge = ref('');
const isVerifyShown = ref(false);
const verifyEmail = () => {
+ if (challenge.value.length !== 6) {
+ return false;
+ }
reqCheck({
captcha_id: veriflyData.value.captcha_id,
challenge: challenge.value,
email: issueData.email,
}).then(() => {
+ challenge.value = '';
isVerifyShown.value = false;
sendVerifyEmail();
});
@@ -103,7 +108,6 @@ const repoParams = reactive({
page: 1,
per_page: 40,
keyword: '',
- public: true,
status: '开始',
sig: '',
total: 0,
@@ -114,8 +118,8 @@ const issueData: IssueData = reactive({
title: decodeURI(getUrlParam('title')) || '',
issue_type_id: '',
sig: '',
- project_id: Number(getUrlParam('repo_id')) || 7392228,
- repo: getUrlParam('repo') || 'openeuler/community-issue',
+ project_id: Number(getUrlParam('repo_id')) || defaultIssueRepoID,
+ repo: getUrlParam('repo') || defaultIssueRepo,
email: '',
code: '',
description: '',
@@ -148,8 +152,8 @@ function getRepoBySigName() {
type: 'warning',
duration: 10000,
});
- issueData.repo = 'openeuler/community-issue';
- issueData.project_id = 7392228;
+ issueData.repo = defaultIssueRepo;
+ issueData.project_id = defaultIssueRepoID;
}
});
}
@@ -267,7 +271,8 @@ function resetForm(verify: FormInstance) {
repoParams.sig = '';
issueData.privacy = ['true'];
issueData.description = '';
- issueData.repo = '';
+ issueData.repo = defaultIssueRepo;
+ issueData.project_id = defaultIssueRepoID;
challenge.value = '';
verify.scrollToField('title');
}