Skip to content

Commit

Permalink
Merge pull request #269 from jason5ng32/dev
Browse files Browse the repository at this point in the history
Add Security Checklist
  • Loading branch information
jason5ng32 authored Dec 25, 2024
2 parents 0795caa + 9c9e574 commit 7b327b0
Show file tree
Hide file tree
Showing 19 changed files with 5,823 additions and 48 deletions.
9 changes: 9 additions & 0 deletions frontend/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,15 @@ const ShortcutKeys = (isOriginalSite) => {
},
description: t('shortcutKeys.MTRTest'),
},
{
keys: "S",
action: () => {
scrollToElement("AdvancedTools", 80);
advancedToolsRef.value.navigateAndToggleOffcanvas('/securitychecklist');
trackEvent('Nav', 'NavClick', 'SecurityChecklist');
},
description: t('shortcutKeys.SecurityChecklist'),
},
{
keys: "r",
action: () => {
Expand Down
1 change: 1 addition & 0 deletions frontend/components/Advanced.vue
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ const cards = reactive([
{ path: '/whois', icon: '📓', titleKey: 'whois.Title', noteKey: 'advancedtools.Whois', enabled: true },
{ path: '/macchecker', icon: '🗄️', titleKey: 'macchecker.Title', noteKey: 'advancedtools.MacChecker', enabled: true },
{ path: '/browserinfo', icon: '🖥️', titleKey: 'browserinfo.Title', noteKey: 'advancedtools.BrowserInfo', enabled: true },
{ path: '/securitychecklist', icon: '📋', titleKey: 'securitychecklist.Title', noteKey: 'advancedtools.SecurityChecklist', enabled: true },
{ path: '/invisibilitytest', icon: '🫣', titleKey: 'invisibilitytest.Title', noteKey: 'advancedtools.InvisibilityTest', enabled: false }
]);
Expand Down
8 changes: 8 additions & 0 deletions frontend/components/Footer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,14 @@ const thanksList = [
name: 'Globalping by jsDelivr',
link: 'https://globalping.io/'
},
{
name: 'ProxyCheck.io',
link: 'https://proxycheck.io/'
},
{
name: 'Digital Defense',
link: 'https://digital-defense.io/'
},
{
name: 'ChatGPT',
link: 'https://chatgpt.com/'
Expand Down
24 changes: 24 additions & 0 deletions frontend/components/IpInfos.vue
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,30 @@
</span>
</li>

<li v-show="(!isMobile || !isCardsCollapsed) && ipGeoSource === 0" class="jn-list-group-item"
:class="{ 'dark-mode': isDarkMode }">
<span class="jn-text col-auto">
<i class="bi bi-speedometer"></i>
{{ t('ipInfos.qualityScore') }} :&nbsp;
</span>

<span v-if="card.qualityScore !== 'unknown'" class="col-3 jn-risk-score ">
<span class="progress border" :class="[isDarkMode ? 'border-light bg-dark' : 'border-dark']"
role="progressbar" aria-label="Quality Score" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
<span class="progress-bar" :class="[isDarkMode ? 'bg-light' : 'bg-dark']"
:style='"width:" + card.qualityScore +"%"'></span>
</span>
</span>

<span class="ps-2">
<span v-if="card.qualityScore === 'unknown'">
{{ t('ipInfos.qualityScoreUnknown') }}
</span>
<span v-else>{{ card.qualityScore }}% <i v-if="!isMobile" v-tooltip="t('Tooltips.qualityScoreExplain')" class="bi bi-question-circle"></i></span>
</span>

</li>

<li v-show="!isMobile || !isCardsCollapsed" class="jn-list-group-item border-0"
:class="{ 'dark-mode': isDarkMode }">
<span class="jn-text col-auto">
Expand Down
565 changes: 565 additions & 0 deletions frontend/components/advanced-tools/SecurityChecklist.vue

Large diffs are not rendered by default.

20 changes: 0 additions & 20 deletions frontend/components/widgets/Preferences.vue
Original file line number Diff line number Diff line change
Expand Up @@ -372,24 +372,4 @@ defineExpose({
#offcanvasPreferences {
z-index: 1053;
}
.jn-check-dark:checked {
background-color: #ffffff;
border-color: #ffffff;
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23212529'/%3e%3c/svg%3e");
}
.jn-check-dark:focus {
border-color: #ffffff;
}
.jn-check-light:checked {
background-color: #212529;
border-color: #212529;
}
.jn-check-light:focus {
border-color: #212529;
}
</style>
35 changes: 30 additions & 5 deletions frontend/components/widgets/QueryIP.vue
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
<template>
<!-- Search BTN -->
<button class="btn btn-primary queryip"
data-bs-toggle="modal" aria-label="IP Check" data-bs-target="#IPCheck" @click="openQueryIP"
v-tooltip="t('Tooltips.QueryIP')"><i class="bi bi-search"></i></button>
<button class="btn btn-primary queryip" data-bs-toggle="modal" aria-label="IP Check" data-bs-target="#IPCheck"
@click="openQueryIP" v-tooltip="t('Tooltips.QueryIP')"><i class="bi bi-search"></i></button>

<!-- Search Modal -->
<div class="modal fade" id="IPCheck" tabindex="-1" aria-labelledby="IPCheck" aria-hidden="true">
Expand Down Expand Up @@ -82,6 +81,32 @@
</span>
</li>

<li v-if="ipGeoSource === 0" class="jn-list-group-item"
:class="{ 'dark-mode': isDarkMode }">
<span class="jn-text col-auto">
<i class="bi bi-speedometer"></i>
{{ t('ipInfos.qualityScore') }} :&nbsp;
</span>

<span v-if="modalQueryResult.qualityScore !== 'unknown'"
class="col-3 jn-risk-score ">
<span class="progress border"
:class="[isDarkMode ? 'border-light bg-dark' : 'border-dark']"
role="progressbar" aria-label="Quality Score" aria-valuenow="0"
aria-valuemin="0" aria-valuemax="100">
<span class="progress-bar" :class="[isDarkMode ? 'bg-light' : 'bg-dark']"
:style='"width:" + modalQueryResult.qualityScore +"%"'></span>
</span>
</span>

<span class="ps-2">
<span v-if="modalQueryResult.qualityScore === 'unknown'">
{{ t('ipInfos.qualityScoreUnknown') }}
</span>
<span v-else>{{ modalQueryResult.qualityScore }}%</span>
</span>

</li>

<li class="list-group-item jn-list-group-item" :class="{ 'dark-mode': isDarkMode }">
<span class="jn-text col-auto">
Expand Down Expand Up @@ -122,7 +147,7 @@ import { transformDataFromIPapi } from '@/utils/transform-ip-data.js';
import { useI18n } from 'vue-i18n';
import { trackEvent } from '@/utils/use-analytics';
const {t} = useI18n();
const { t } = useI18n();
// 引入 Store
const store = useMainStore();
Expand Down Expand Up @@ -204,7 +229,7 @@ const fetchIPForModal = async (ip, sourceID = null) => {
if (data.error) {
throw new Error(data.reason || "IP lookup failed");
}
modalQueryResult.value = transformDataFromIPapi(data, source.id, t,lang.value);
modalQueryResult.value = transformDataFromIPapi(data, source.id, t, lang.value);
isChecking.value = "idle";
break;
} catch (error) {
Expand Down
52 changes: 49 additions & 3 deletions frontend/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,33 @@
"languageTips": "Refreshing the browser will take effect."
}
},
"securitychecklist": {
"Title": "Security Checklist",
"Note": "This is a very comprehensive cybersecurity checklist covering aspects such as password security, browsing security, and mobile device security. In the current environment, information leaks can lead to significant losses, thus it is necessary to ensure that we protect our privacy and enhance the security of our access while connected to the internet.",
"Note2": "This list contains many items; you do not need to check everything at once. Progress will be saved in the browser, and you can return at any time to continue the checks.",
"Progress": "Check Progress",
"Item": "Item",
"Items": "Item(s) ",
"Priority": "Priority",
"Ignore": "Ignore",
"alert-total": "The security check has a total of",
"alert-checked": "You have completed",
"alert-ignored": "Ignored",
"alert-unchecked": "Unchecked.",
"Checked": "Checked",
"Ignored": "Ignored",
"Unchecked": "Unchecked",
"Basic": "Basic",
"Optional": "Optional",
"Essential": "Essential",
"Advanced": "Advanced",
"Reset":"Reset Checklist",
"ShowAll":"Show All",
"ShowUnchecked":"Show Unchecked",
"ShowIgnored":"Show Ignored",
"ShowChecked":"Show Checked",
"Loading":"Loading..."
},
"shell": {
"Title": "Command Line API",
"Note1": "Hey, turns out you also like using the terminal?",
Expand Down Expand Up @@ -198,7 +225,8 @@
"Whois": "Search for domain/IP registration information",
"InvisibilityTest": "Check if you are using a proxy or VPN",
"MacChecker": "Query information of a physical address",
"BrowserInfo": "Check browser information and fingerprint"
"BrowserInfo": "Check browser information and fingerprint",
"SecurityChecklist": "Guide to securing your digital life"
},
"macchecker": {
"Title": "MAC Lookup",
Expand Down Expand Up @@ -273,7 +301,8 @@
"QueryIP": "Query IP Address",
"GithubLink": "View Source Code on GitHub",
"RefreshRuleTests": "Refresh Rule Tests",
"Shell": "Command Line API"
"Shell": "Command Line API",
"qualityScoreExplain": "The IP quality score is calculated based on multiple weighted factors, including the type of IP, whether it is a proxy/VPN, and the number of recent attack events detected from this IP. A higher score indicates better IP quality, reducing the likelihood of being blocked by risk control on some websites."
},
"ipInfos": {
"id": "ipinfos",
Expand All @@ -295,6 +324,8 @@
"SelectSource": "Select IP Geolocation Source",
"type": "Type",
"isProxy": "Proxy",
"qualityScore": "IP Quality",
"qualityScoreUnknown": "Score Unknown",
"ASNInfo": {
"note": "Related data for this AS:",
"asnName": "AS Name:",
Expand Down Expand Up @@ -460,7 +491,8 @@
"MacChecker": "Open MAC lookup panel",
"BrowserInfo": "Open Browser Info panel",
"fullScreenAdvancedTools": "Full Screen Advanced Tools",
"Shell": "Command Line API"
"Shell": "Command Line API",
"SecurityChecklist": "Open Security Checklist panel"
},
"page": {
"title": "IPCheck.ing - Check My IP Address and Geolocation - Check WebRTC Connection IP - DNS Leak Test - Speed Test - Jason Ng Open Source",
Expand Down Expand Up @@ -907,6 +939,20 @@
"change": "Other general optimizations"
}
]
},
{
"version": "v4.5",
"date": "Dec 25, 2024",
"content": [
{
"type": "add",
"change": "Add Security Checklist"
},
{
"type": "improve",
"change": "Other general optimizations"
}
]
}
]
}
Expand Down
52 changes: 49 additions & 3 deletions frontend/locales/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,33 @@
"languageTips": "Rafraîchissement du navigateur pour prendre effet."
}
},
"securitychecklist": {
"Title": "Liste de vérification de sécurité",
"Note": "Ceci est une liste de vérification de cybersécurité très complète, couvrant des aspects tels que la sécurité des mots de passe, la sécurité de navigation, et la sécurité des dispositifs mobiles. Dans l'environnement actuel, une fuite d'informations peut entraîner des pertes significatives, il est donc nécessaire de s'assurer que nous protégeons notre vie privée et augmentons la sécurité de nos accès lors de la connexion à Internet.",
"Note2": "Cette liste contient de nombreux éléments; vous n'avez pas besoin de tout vérifier en une seule fois. Les progrès seront sauvegardés dans le navigateur, et vous pouvez revenir à tout moment pour continuer les vérifications.",
"Progress": "Progression des vérifications",
"Item": "Élément",
"Items": "Élément(s) ",
"Priority": "Priorité",
"Ignore": "Ignorer",
"alert-total": "La vérification de sécurité a un total de",
"alert-checked": "Vous avez complété",
"alert-ignored": "Ignoré",
"alert-unchecked": "Non vérifié.",
"Checked": "Vérifié",
"Ignored": "Ignoré",
"Unchecked": "Non vérifié",
"Basic": "De base",
"Optional": "En option",
"Essential": "Essentiel",
"Advanced": "Avancé",
"Reset": "Réinitialiser",
"ShowAll": "Afficher tout",
"ShowUnchecked": "Afficher les éléments non cochés",
"ShowIgnored": "Afficher les éléments ignorés",
"ShowChecked": "Afficher les éléments cochés",
"Loading": "Chargement..."
},
"shell": {
"Title": "API de ligne de commande",
"Note1": "Eh bien, il s'avère que toi aussi tu aimes utiliser le terminal ?",
Expand Down Expand Up @@ -198,7 +225,8 @@
"Whois": "Recherche d'informations sur l'enregistrement de domaine/IP",
"InvisibilityTest": "Vérifiez si vous utilisez un proxy ou un VPN",
"MacChecker": "Requête d'informations d'une adresse physique",
"BrowserInfo": "Vérifier les informations du navigateur et l'empreinte digitale"
"BrowserInfo": "Vérifier les informations du navigateur et l'empreinte digitale",
"SecurityChecklist": "Guide pour sécuriser votre vie numérique"
},
"macchecker": {
"Title": "Recherche MAC",
Expand Down Expand Up @@ -273,7 +301,8 @@
"QueryIP": "Interroger l'adresse IP",
"GithubLink": "Voir le code source sur GitHub",
"RefreshRuleTests": "Actualiser les tests de règles",
"Shell": "Ouvrir le shell"
"Shell": "Ouvrir le shell",
"qualityScoreExplain": "Le score de qualité IP est calculé sur la base de plusieurs facteurs pondérés, incluant le type d'IP, si c'est un proxy/VPN, et le nombre d'événements d'attaque récemment détectés provenant de cette IP. Un score plus élevé indique une meilleure qualité de l'IP, réduisant la probabilité d'être bloqué par le contrôle de risques sur certains sites."
},
"ipInfos": {
"id": "ipinfos",
Expand All @@ -295,6 +324,8 @@
"SelectSource": "Source de géolocalisation IP",
"type": "Type",
"isProxy": "Proxy",
"qualityScore": "Qualité IP",
"qualityScoreUnknown": "Score inconnu",
"ASNInfo": {
"note": "Données associées à cet AS :",
"asnName": "Nom de l'AS :",
Expand Down Expand Up @@ -460,7 +491,8 @@
"MacChecker": "Ouvrir le Recherche de MAC",
"BrowserInfo": "Ouvrir l'Info du navigateur",
"fullScreenAdvancedTools": "Outils avancés en plein écran",
"Shell": "Ouvrir le Shell"
"Shell": "Ouvrir le Shell",
"SecurityChecklist": "Ouvrir la Liste de sécurité"
},
"page": {
"title": "IPCheck.ing - Vérifier mon adresse IP et géolocalisation - Vérifier l'adresse IP de connexion WebRTC - Test de fuite DNS - Test de vitesse - Jason Ng Open Source",
Expand Down Expand Up @@ -907,6 +939,20 @@
"change": "Autres optimisations générales"
}
]
},
{
"version": "v4.5",
"date": "Dec 25, 2024",
"content": [
{
"type": "add",
"change": "Liste de vérification de sécurité"
},
{
"type": "improve",
"change": "Autres optimisations générales"
}
]
}
]
}
Expand Down
Loading

0 comments on commit 7b327b0

Please sign in to comment.