diff --git a/Dockerfile b/Dockerfile index 138016d4ecb5cdcafc701b6821b48df611e0a522..0b8c87a535f792c50ef8b46a86796044938bb700 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,16 +2,16 @@ FROM gplane/pnpm as Builder RUN pnpm -v -RUN mkdir -p /home/opendesign/web -WORKDIR /home/opendesign/web -COPY . /home/opendesign/web +RUN mkdir -p /home/openeuler/web +WORKDIR /home/openeuler/web +COPY . /home/openeuler/web RUN pnpm install -RUN pnpm build:p +RUN pnpm build FROM nginx:1.20.0 -COPY --from=Builder /home/opendesign/web/packages/portal/.vitepress/dist /usr/share/nginx/html/ +COPY --from=Builder /home/openeuler/web/packages/portal/.vitepress/dist /usr/share/nginx/html/ RUN chmod -R 755 /usr/share/nginx/html COPY ./deploy/nginx/nginx.conf /etc/nginx/nginx.conf diff --git a/app/.vitepress/config.js b/app/.vitepress/config.js index b9f1cd6f4ccffe29d34e98571655c1b52d1f28b9..e5820a5e589254ba77f3565b970045955cdbd91d 100644 --- a/app/.vitepress/config.js +++ b/app/.vitepress/config.js @@ -2,8 +2,6 @@ import i18n from './src/i18n'; module.exports = { base: '/', - title: 'openEuler', - description: 'openEuler', head: [ [ 'link', @@ -20,6 +18,8 @@ module.exports = { }, ], ], + appearance: true, // enable dynamic scripts from dark mode + titleTemplate: false, // vitepress supports pageTitileTemplate since 1.0.0 locales: { '/': { lang: 'zh', @@ -49,8 +49,8 @@ module.exports = { themeConfig: { locales: { '/': i18n.zh, - '/zh/': i18n.zh, - '/en/': i18n.en, + '/zh/': i18n.zh, + '/en/': i18n.en, '/ru/': i18n.ru, }, }, diff --git a/app/.vitepress/src/App.vue b/app/.vitepress/src/App.vue index 8bb01ef6a6001c017d345c6820925cb1348f42ef..bd0c2af08d235ddf457e94c799827c72cf6520ed 100644 --- a/app/.vitepress/src/App.vue +++ b/app/.vitepress/src/App.vue @@ -20,8 +20,7 @@ const isDoc = computed(() => { diff --git a/app/.vitepress/src/components/AppFooter.vue b/app/.vitepress/src/components/AppFooter.vue index d2fa4b16a529d12c662a6dd4a8d7ce7e66bd9ec6..58117defda17d9d3bfcdc33d4011157189ae346e 100644 --- a/app/.vitepress/src/components/AppFooter.vue +++ b/app/.vitepress/src/components/AppFooter.vue @@ -153,7 +153,7 @@ $color: #fff; .copyright { font-size: var(--o-font-size-text); color: $color; - margin-top: var(--o-spacing-s2); + margin-top: var(--o-spacing-h5); } .footer-option { @@ -181,7 +181,7 @@ $color: #fff; p { color: $color; font-size: var(--o-font-size-tip); - margin-top: var(--o-spacing-s1); + margin-top: var(--o-spacing-h8); } } .link { @@ -196,23 +196,23 @@ $color: #fff; @media (max-width: 1100px) { .footer { - padding: var(--o-spacing-m) 0 0; + padding: var(--o-spacing-h2) 0 0; .atom-text { font-size: var(--o-font-size-text); line-height: var(--o-line-height-text); } .atom-logo { height: 32px; - margin: var(--o-spacing-s2) 0 var(--o-spacing-s3); + margin: var(--o-spacing-h5) 0 var(--o-spacing-h4); } .wrapper { display: grid; text-align: center; justify-content: center; - padding: var(--o-spacing-s3) 0; + padding: var(--o-spacing-h4) 0; } .footer-logo { - margin: var(--o-spacing-s2) 0; + margin: var(--o-spacing-h5) 0; img { margin-bottom: 4px; } @@ -224,7 +224,7 @@ $color: #fff; } .copyright { font-size: var(--o-font-size-tip); - margin-top: var(--o-spacing-s1); + margin-top: var(--o-spacing-h8); } } } diff --git a/app/.vitepress/src/components/AppHeader.vue b/app/.vitepress/src/components/AppHeader.vue index 8b7b7280f678d9647174b0e1348c21a2e818a4fe..a0c4a6cbeb17cd80a490ee160992bd6e85fd18dd 100644 --- a/app/.vitepress/src/components/AppHeader.vue +++ b/app/.vitepress/src/components/AppHeader.vue @@ -406,7 +406,7 @@ onUnmounted(() => { } .mobile-menu-icon { display: none; - margin-right: var(--o-spacing-s2); + margin-right: var(--o-spacing-h5); @media (max-width: 1100px) { display: block; } @@ -519,7 +519,7 @@ onUnmounted(() => { font-size: var(--o-font-size-tip); line-height: var(--o-line-height-h3); color: var(--o-color-text2); - padding: 0 var(--o-spacing-s2); + padding: 0 var(--o-spacing-h5); position: relative; cursor: pointer; &::after { @@ -544,7 +544,7 @@ onUnmounted(() => { } } .mobile-tools { - padding: 0 var(--o-spacing-s2); + padding: 0 var(--o-spacing-h5); margin-bottom: 24px; } .el-switch { diff --git a/app/.vitepress/src/components/AppLanguage.vue b/app/.vitepress/src/components/AppLanguage.vue index 7c9145e5498f2e4f0822f8341c4dffaecc887669..42cee197cd6356e1421720cc4e7121c56c660426 100644 --- a/app/.vitepress/src/components/AppLanguage.vue +++ b/app/.vitepress/src/components/AppLanguage.vue @@ -110,7 +110,7 @@ watch( top: 60px; left: -24px; background: var(--o-color-bg); - padding: 0 var(--o-spacing-s2); + padding: 0 var(--o-spacing-h5); cursor: pointer; z-index: 80; .lang-item { diff --git a/app/.vitepress/src/components/BannerLevel2.vue b/app/.vitepress/src/components/BannerLevel2.vue index 2742238f6533db4723037a214d80c94da32395c6..6f51975b51f27d6f6db29e8ad23f32303ce5584f 100644 --- a/app/.vitepress/src/components/BannerLevel2.vue +++ b/app/.vitepress/src/components/BannerLevel2.vue @@ -91,7 +91,7 @@ const rootStyle = computed(() => { color: var(--o-color-text); font-size: var(--o-font-size-h2); line-height: var(--o-line-height-h2); - margin-top: var(--o-spacing-m); + margin-top: var(--o-spacing-h2); } .banner-subtitle { diff --git a/app/.vitepress/src/components/HeaderNav.vue b/app/.vitepress/src/components/HeaderNav.vue index 267da51e63df5daf10c24e35a308bf76a84cc4f3..81dccbfd3095201e5a7211188cf9e3a10104d8ee 100644 --- a/app/.vitepress/src/components/HeaderNav.vue +++ b/app/.vitepress/src/components/HeaderNav.vue @@ -105,7 +105,7 @@ const hideSub = () => { display: inline-flex; align-items: center; height: 100%; - margin: 0 var(--o-spacing-s3); + margin: 0 var(--o-spacing-h4); font-size: var(--o-font-size-text); line-height: var(--o-line-height-h8); color: var(--o-color-text2); @@ -160,7 +160,7 @@ const hideSub = () => { color: var(--o-color-text2); display: block; white-space: nowrap; - padding: 0 var(--o-spacing-s1); + padding: 0 var(--o-spacing-h8); min-width: 106px; &.active { background-color: var(--o-color-brand); diff --git a/app/.vitepress/src/i18n/index.ts b/app/.vitepress/src/i18n/index.ts index b50c7c9c5dcc3c3ddfec6deb3debe6c4290ab156..4218eef24d196ef3b135ee9c255a790d8653c797 100644 --- a/app/.vitepress/src/i18n/index.ts +++ b/app/.vitepress/src/i18n/index.ts @@ -3,22 +3,26 @@ import sig from './sig'; import download from './download'; import brand from './brand'; +import security from './security'; const i18n = { zh: { sig: sig.zh, download: download.zh, brand: brand.zh, + security: security.zh, }, en: { sig: sig.en, download: download.en, brand: brand.en, + security: security.en, }, ru: { sig: sig.ru, download: download.ru, brand: brand.ru, + security: security.ru, }, }; diff --git a/app/.vitepress/src/i18n/security/index.ts b/app/.vitepress/src/i18n/security/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..7831da7aeeef680cd52ceda4badfdc6dffe4a388 --- /dev/null +++ b/app/.vitepress/src/i18n/security/index.ts @@ -0,0 +1,9 @@ +import zh from './security-zh'; +import en from './security-en'; +import ru from './security-ru'; + +export default { + zh, + en, + ru, +}; diff --git a/app/.vitepress/src/i18n/security/security-en.ts b/app/.vitepress/src/i18n/security/security-en.ts new file mode 100644 index 0000000000000000000000000000000000000000..4ed959a4499bad43228fca5c6a49523b8a0f472e --- /dev/null +++ b/app/.vitepress/src/i18n/security/security-en.ts @@ -0,0 +1,59 @@ +export default{ + en: { + OVERVIEW: 'Overview', + UPDATED_PACKAGES: 'Updated software packages', + SECURITY_ADVISORIES: 'Security Advisories', + SECURITY_ADVISORIES_NAME: 'Title', + SEARCH: 'Search', + SEVERITY_LIST : [ + { + NAME: 'All', + LABEL: '' + }, + { + NAME: 'Low', + LABEL: 'Low' + }, + { + NAME: 'Medium', + LABEL: 'Medium' + }, + { + NAME: 'High', + LABEL: 'High' + }, + { + NAME: 'Critical', + LABEL: 'Critical' + } + ], + YEAR: 'Year', + PLACEHOLDER: 'Select', + ALL: 'ALL', + ADVISORY: 'Advisory', + SYNOPSIS: 'Synopsis', + SEVERITY: 'Severity', + AFFECTED_PRODUCTS: 'Affected Product', + AFFECTED_COMPONENTS: 'Affected \n Component', + RELEASE_DATE: 'Release Date', + CVSS_SCORE: 'CVSS Score', + MODIFIED_TIME: 'Time of Modification', + OPERATION: 'Operation', + DETAIL: 'Details', + REPORTING: 'Vulnerability Report', + INPUT_CVE_ID: 'Please input CVE ID', + INPUT_STATUS: 'Please input Status', + BRIEF_INTRODUCTION: 'BriefIntroduction', + THEME: 'theme', + DESCRIPTION: 'description', + PACKAGE: 'packages', + REFERENCE_DOCUMENTS: 'referenceDocuments', + CVE_DETAIL: 'CVE Detail', + METRICS_V3: 'CVSS v3 Metrics', + METRICS_V2: 'CVSS v2 Metrics', + SCORE: 'Score', + PRODUCT: 'Product', + STATUS: 'Status', + PACKAGE_NAME:'packages', + }, +} \ No newline at end of file diff --git a/app/.vitepress/src/i18n/security/security-ru.ts b/app/.vitepress/src/i18n/security/security-ru.ts new file mode 100644 index 0000000000000000000000000000000000000000..b7613a21c46e06eda904b47e354b60640a799b96 --- /dev/null +++ b/app/.vitepress/src/i18n/security/security-ru.ts @@ -0,0 +1,58 @@ +export default{ + OVERVIEW: 'Краткое описание', + UPDATED_PACKAGES: 'Обновленные пакеты ПО', + SECURITY_ADVISORIES: 'Консультанты по безопасности', + SECURITY_ADVISORIES_NAME: 'Title', + SEARCH: 'Поиск', + SEVERITY_LIST : [ + { + NAME: 'Все', + LABEL: '' + }, + { + NAME: 'Низкий', + LABEL: 'Low' + }, + { + NAME: 'Средний', + LABEL: 'Medium' + }, + { + NAME: 'Высокий', + LABEL: 'High' + }, + { + NAME: 'Критический', + LABEL: 'Critical' + } + ], + YEAR: 'Год', + PLACEHOLDER: 'Выбрать', + ALL: 'ВСЕ', + ADVISORY: 'Консультант', + SEVERITY_PLACEHOLDER: 'Степень серьезности', + SYNOPSIS: 'Синопсис', + SEVERITY: 'Степень серьезности', + AFFECTED_PRODUCTS: 'Затронутый продукт', + AFFECTED_COMPONENTS: 'Затронутый \n компонент', + RELEASE_DATE: 'Дата выпуска релиза', + CVSS_SCORE: 'Оценка по CVSS', + MODIFIED_TIME: 'Время изменения', + OPERATION: 'Действие', + DETAIL: 'Описание', + REPORTING: 'Сообщение об уязвимостях', + INPUT_CVE_ID: 'Введите идентификатор CVE', + INPUT_STATUS: 'Введите идентификатор Status', + BRIEF_INTRODUCTION: 'BriefIntroduction', + THEME: 'theme', + DESCRIPTION: 'description', + PACKAGE: 'packages', + REFERENCE_DOCUMENTS: 'referenceDocuments', + CVE_DETAIL: 'CVE Detail', + METRICS_V3: 'CVSS v3 Metrics', + METRICS_V2: 'CVSS v2 Metrics', + SCORE: 'Score', + PRODUCT: 'Product', + STATUS: 'Status', + PACKAGE_NAME:'packages', + } \ No newline at end of file diff --git a/app/.vitepress/src/i18n/security/security-zh.ts b/app/.vitepress/src/i18n/security/security-zh.ts new file mode 100644 index 0000000000000000000000000000000000000000..cef3721190bf8a390a344153d4cabb563b0867b6 --- /dev/null +++ b/app/.vitepress/src/i18n/security/security-zh.ts @@ -0,0 +1,57 @@ +export default { + OVERVIEW: '概述', + UPDATED_PACKAGES: '更新的软件包', + SECURITY_ADVISORIES: '安全公告', + SECURITY_ADVISORIES_NAME: '公告名', + SEARCH: '搜索安全公告', + SEVERITY_LIST : [ + { + NAME: '全部', + LABEL: '' + }, + { + NAME: '低', + LABEL: 'Low' + }, + { + NAME: '中', + LABEL: 'Medium' + }, + { + NAME: '高', + LABEL: 'High' + }, + { + NAME: '致命', + LABEL: 'Critical' + } + ], + YEAR: '年份', + PLACEHOLDER: '请选择', + ALL: '全部', + ADVISORY: '公告', + SYNOPSIS: '概述', + SEVERITY: '严重级别', + AFFECTED_PRODUCTS: '影响产品', + AFFECTED_COMPONENTS: '影响组件', + RELEASE_DATE: '发布时间', + CVSS_SCORE: 'CVSS评分', + MODIFIED_TIME: '修改时间', + OPERATION: '操作', + DETAIL: '详情', + REPORTING: '漏洞管理', + INPUT_CVE_ID: '请输入CVE ID', + INPUT_STATUS: '请输入状态', + BRIEF_INTRODUCTION: '简介', + THEME: '主题', + DESCRIPTION: '描述', + PACKAGE: '包', + REFERENCE_DOCUMENTS: '参考', + CVE_DETAIL: 'CVE详情', + METRICS_V3: 'CVSS v3 指标', + METRICS_V2: 'CVSS v2 指标', + SCORE: '评分', + PRODUCT: '产品', + STATUS: '状态', + PACKAGE_NAME:'包', + } \ No newline at end of file diff --git a/app/.vitepress/src/shared/@types/interface.ts b/app/.vitepress/src/shared/@types/interface.ts deleted file mode 100644 index 2aecd104e18ed8baf51fb878118f5e435975af9d..0000000000000000000000000000000000000000 --- a/app/.vitepress/src/shared/@types/interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface NavItem { - id: string; - label: string; - path: string; -} diff --git a/app/.vitepress/src/shared/@types/type-calendar.ts b/app/.vitepress/src/shared/@types/type-calendar.ts new file mode 100644 index 0000000000000000000000000000000000000000..fb4706b05c67d77a2d4df302442a300344aa3cc6 --- /dev/null +++ b/app/.vitepress/src/shared/@types/type-calendar.ts @@ -0,0 +1,26 @@ +export interface Item { + creator: string; + duration_time: string; + join_url: string; + startTime: string; + endTiem: string; + url: string; + data?: string; + id?: string; + etherpad?: string; + start_date?: string; + name?: string; + title?: string; + schedules?: any; + activity_category?: number; + group_name?: string; + endTime?: string; + end_date?: string; + activity_type?: number; +} + +export interface TableData { + date: string; + start_date?: string; + timeData: Item[]; +} diff --git a/app/.vitepress/src/shared/styles/_filter.scss b/app/.vitepress/src/shared/styles/_filter.scss new file mode 100644 index 0000000000000000000000000000000000000000..58e7c34d7b9a6047df9bb35baf1399913c1bec93 --- /dev/null +++ b/app/.vitepress/src/shared/styles/_filter.scss @@ -0,0 +1,21 @@ +.el-popper.filter { + box-shadow: none !important; + --el-popper-border-radius: none; + + .el-popper__arrow { + display: none; + } + + .el-select-dropdown__item { + color: var(--o-color-base_inverse); + + &:hover { + color: var(--o-color-brand); + } + } + + .el-select-dropdown__item.selected { + font-weight: normal; + color: var(--o-color-brand); + } +} \ No newline at end of file diff --git a/app/.vitepress/src/shared/styles/index.scss b/app/.vitepress/src/shared/styles/index.scss index a560c0ab0f6955eb583a166f2e28908776c2f5fd..5deac70d3c1af68bbcfd55392fa9dadaf531aece 100644 --- a/app/.vitepress/src/shared/styles/index.scss +++ b/app/.vitepress/src/shared/styles/index.scss @@ -3,3 +3,4 @@ @import './base.scss'; @import './style.scss'; @import './markdown.scss'; +@import './_filter.scss'; diff --git a/app/.vitepress/src/shared/styles/markdown.scss b/app/.vitepress/src/shared/styles/markdown.scss index 403ee7ea81eeef47d955ad831fb3a41bb4360caf..f757bcbcba2c21b1a01e3806e4f3a029a04251fb 100644 --- a/app/.vitepress/src/shared/styles/markdown.scss +++ b/app/.vitepress/src/shared/styles/markdown.scss @@ -1,11 +1,16 @@ .markdown { max-width: 1504px; - padding: var(--o-spacing-m); - margin: var(--o-spacing-l) auto; - margin-top: 144px; + padding: var(--o-spacing-h2); + margin: var(--o-spacing-h1) auto; + margin-top: var(--o-spacing-h2); background-color: var(--o-color-bg); --o-color-table: #dfe1e8; // 表格边框 + ol, + ul { + list-style: inherit; + } + h1, h2, h3, @@ -21,38 +26,38 @@ } hr { - margin: var(--o-spacing-l) var(--o-spacing-l); + margin: var(--o-spacing-h1) var(--o-spacing-h1); border: none; height: 1px; background-color: var(--o-color-bg4); } h1 { - margin-top: var(--o-spacing-l); + margin-top: var(--o-spacing-h1); font-size: var(--o-font-size-h3); line-height: var(--o-line-height-h3); } h2 { - margin-top: var(--o-spacing-m); + margin-top: var(--o-spacing-h2); font-size: var(--o-font-size-h5); line-height: var(--o-line-height-h5); } h3 { - margin-top: var(--o-spacing-m); + margin-top: var(--o-spacing-h2); font-size: var(--o-font-size-h7); line-height: var(--o-line-height-h8); } h4 { - margin-top: var(--o-spacing-s2); + margin-top: var(--o-spacing-h5); font-size: var(--o-font-size-h8); line-height: var(--o-font-size-h6); } h5 { - margin-top: var(--o-spacing-s2); + margin-top: var(--o-spacing-h5); font-size: var(--o-font-size-text); line-height: var(--o-font-size-h6); } @@ -60,7 +65,7 @@ p, ul, ol { - margin-top: var(--o-spacing-s1); + margin-top: var(--o-spacing-h8); font-size: var(--o-font-size-text); font-weight: normal; color: var(--o-color-text3); @@ -109,7 +114,7 @@ } div[class*="language-"] { - margin-bottom: var(--o-spacing-s3); + margin-bottom: var(--o-spacing-h4); border: 1px solid rgba(151, 151, 151, 1); border-radius: 0; @@ -121,8 +126,6 @@ padding: 1em; margin: .5em 0; overflow: auto; - - code {} } } diff --git a/app/.vitepress/src/shared/styles/style.scss b/app/.vitepress/src/shared/styles/style.scss index 23ea7bf33c4338cf1c22d9341a61495f9b245ae3..8fa8071f9f9878719d7ef9ee7274420a953a078b 100644 --- a/app/.vitepress/src/shared/styles/style.scss +++ b/app/.vitepress/src/shared/styles/style.scss @@ -1,13 +1,13 @@ -body { - background: var(--o-color-bg2); -} -.wrapper { - max-width: 1504px; - padding: 0 44px; - margin: 0 auto; - height: calc(100vh - 80px - 405px); - @media (max-width: 1100px) { - padding: 0 16px; - height: 48px; - } -} +body { + background: var(--o-color-bg2); +} +.wrapper { + max-width: 1504px; + padding: 0 44px; + margin: 0 auto; + min-height: calc(100vh - 80px - 405px); + @media (max-width: 1100px) { + padding: 0 16px; + height: 48px; + } +} diff --git a/app/.vitepress/src/shared/utils.ts b/app/.vitepress/src/shared/utils.ts index 4939c26226a1903f379b157dfab3ca0e22244250..baa3effbdf500e0281b3049db2b8ac0782f9da0d 100644 --- a/app/.vitepress/src/shared/utils.ts +++ b/app/.vitepress/src/shared/utils.ts @@ -6,3 +6,10 @@ export function formatNumber(num: number) { ? `${(num / 1e4).toFixed(1)}W` : num; } +// TS 对象key合法检查 +export function isValidKey( + key: string | number | symbol, + object: object +): key is keyof typeof object { + return key in object; +} diff --git a/app/.vitepress/src/views/TheDemo.vue b/app/.vitepress/src/views/TheDemo.vue index b6d6570a78f398d62f35fbc5ff49db53090a93de..1b100bfa359a617bd31c9eaa43fef1aeee6e6e95 100644 --- a/app/.vitepress/src/views/TheDemo.vue +++ b/app/.vitepress/src/views/TheDemo.vue @@ -1,8 +1,12 @@ diff --git a/app/.vitepress/src/views/download/TheDownload.vue b/app/.vitepress/src/views/download/TheDownload.vue index 3d38c0dbc5ec67569e5d6166ac4ec0cbe594c32c..fed3ebc33463a06011d5f51084d6228973987be1 100644 --- a/app/.vitepress/src/views/download/TheDownload.vue +++ b/app/.vitepress/src/views/download/TheDownload.vue @@ -133,7 +133,7 @@ const urlStyle = computed(() => { justify-items: center; align-items: center; grid-template-columns: repeat(3, 1fr); - grid-gap: var(--o-spacing-s3); + grid-gap: var(--o-spacing-h4); &-item { width: 100%; max-width: 456px; @@ -148,7 +148,7 @@ const urlStyle = computed(() => { } &-desc { - margin-top: var(--o-spacing-s2); + margin-top: var(--o-spacing-h5); font-size: var(--o-font-size-text); font-family: 'PingFangSC-Regular, PingFang SC'; color: var(--o-color-text3); @@ -162,13 +162,13 @@ const urlStyle = computed(() => { } &-button { - margin-top: var(--o-spacing-s3); + margin-top: var(--o-spacing-h4); padding: 4px 16px; line-height: var(--o-line-height-h8); font-size: var(--o-font-size-text); &-icon { - margin-left: var(--o-spacing-s1); + margin-left: var(--o-spacing-h8); width: var(--o-font-size-tip); height: var(--o-font-size-tip); color: var(--o-color-text); diff --git a/app/.vitepress/src/views/download/TheMirList.vue b/app/.vitepress/src/views/download/TheMirList.vue index 94412928e098fd47d653f951e39a31b410aec14c..46ba83eddc2a668d5161182e3c4f356a9753c5f4 100644 --- a/app/.vitepress/src/views/download/TheMirList.vue +++ b/app/.vitepress/src/views/download/TheMirList.vue @@ -185,12 +185,12 @@ onMounted(async () => { } &-header:first-child { .cell { - padding-left: var(--o-spacing-m); + padding-left: var(--o-spacing-h2); } } &-header:last-child { .cell { - padding-right: var(--o-spacing-m); + padding-right: var(--o-spacing-h2); } } @@ -216,12 +216,12 @@ onMounted(async () => { } &-row:first-child { .cell { - padding-left: var(--o-spacing-m); + padding-left: var(--o-spacing-h2); } } &-row:last-child { .cell { - padding-right: var(--o-spacing-m); + padding-right: var(--o-spacing-h2); } } } diff --git a/app/.vitepress/src/views/security/TheSafetyBulletin.vue b/app/.vitepress/src/views/security/TheSafetyBulletin.vue index d98f2e5f1bb7727b24f7a5ee3a73e880e31f329a..c3cd529db7d5c515d467ef94b24af47016c7624d 100644 --- a/app/.vitepress/src/views/security/TheSafetyBulletin.vue +++ b/app/.vitepress/src/views/security/TheSafetyBulletin.vue @@ -1,28 +1,180 @@ - - - - - + + + + + diff --git a/app/.vitepress/src/views/sig/sig-detail/BreadCrumbs.vue b/app/.vitepress/src/views/sig/sig-detail/BreadCrumbs.vue index 4df13ab286d68824a5fbbbdc2381c3629a895dd1..968ae9fcf3572fe3e5c3b70c57b161485a1d950e 100644 --- a/app/.vitepress/src/views/sig/sig-detail/BreadCrumbs.vue +++ b/app/.vitepress/src/views/sig/sig-detail/BreadCrumbs.vue @@ -13,7 +13,7 @@ import IconArrowRight from '~icons/app/right.svg'; diff --git a/app/zh/security/vulnerability-reporting/procedure(zh).png b/app/zh/security/vulnerability-reporting/procedure(zh).png new file mode 100644 index 0000000000000000000000000000000000000000..6af1336c25c8273d65551d69f95b04fdafd18b84 Binary files /dev/null and b/app/zh/security/vulnerability-reporting/procedure(zh).png differ diff --git a/deploy/nginx/nginx.conf b/deploy/nginx/nginx.conf new file mode 100644 index 0000000000000000000000000000000000000000..019d33d4a09e71e7c2cb1edf9b98f1275376c9f3 --- /dev/null +++ b/deploy/nginx/nginx.conf @@ -0,0 +1,97 @@ +worker_processes auto; + +error_log /var/log/nginx/error.log warn; + +pid /var/run/nginx.pid; + +worker_rlimit_nofile 4096; +events { + use epoll; + worker_connections 4096; +} + +http { + include /etc/nginx/mime.types; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + autoindex off; + sendfile on; + + keepalive_timeout 300; + keepalive_requests 100; + proxy_read_timeout 900; + proxy_connect_timeout 60; + + proxy_send_timeout 60; + client_header_timeout 60; + client_header_buffer_size 1k; + large_client_header_buffers 4 64k; + client_body_buffer_size 16K; + client_body_timeout 60; + send_timeout 60; + server_tokens off; + port_in_redirect off; + limit_conn_zone $binary_remote_addr zone=conn_zone:10m; + limit_conn_zone $server_name zone=perserver:10m; + limit_req_zone global zone=req_zone:1m rate=1000r/s; + limit_req_zone $binary_remote_addr zone=event_zone:10m rate=20r/s; + + proxy_request_buffering off; + client_max_body_size 50m; + + gzip on; + gzip_min_length 1k; + gzip_buffers 4 16k; + gzip_http_version 1.0; + gzip_comp_level 5; + gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/x-httpd-php application/json; + gzip_vary on; + + server { + # listen 443 ssl; + # server_name localhost; + # charset utf-8; + + listen 80; + charset utf-8; + limit_conn perserver 50; + if ($request_method = 'OPTIONS') { + return 401; + } + + location / { + location /assets { + # publish every two weeks + expires 14d; + add_header Cache-Control public; + } + location / { + add_header Cache-Control no-cache; + } + root /usr/share/nginx/html; + index index.html; + # error_page 404 /404.html; + } + + error_page 500 501 502 503 504 505 /500.html; + error_page 401 /401.html; + error_page 404 /404.html; + + location = /401.html { + root /usr/share/nginx/html; + } + + location = /404.html { + root /usr/share/nginx/html; + } + + location = /500.html { + root /usr/share/nginx/html; + } + } +} \ No newline at end of file diff --git a/opendesign/card/OCard.vue b/opendesign/card/OCard.vue index d77b6f58d0132d3af5f704f3c342f33f4be36f62..6450daeb73988ef6fc9e5ca4c6530d1951d6ec70 100644 --- a/opendesign/card/OCard.vue +++ b/opendesign/card/OCard.vue @@ -5,7 +5,10 @@ const attrs = useAttrs();