mirror of
https://github.com/khairul169/honey.git
synced 2026-10-05 02:13:55 +07:00
Rebrand Settings to More
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
import App from "../../../App";
|
||||
import { analyzeService } from "./analyzer";
|
||||
import { privacyBox } from "./tiles";
|
||||
|
||||
|
||||
export default class Privacy {
|
||||
constructor() {
|
||||
this.app = new App()
|
||||
this.config = this.app.config
|
||||
}
|
||||
|
||||
init() {
|
||||
this.initPrivacyPanel()
|
||||
}
|
||||
|
||||
initPrivacyPanel() {
|
||||
let stats = {
|
||||
total: 0,
|
||||
secure: 0,
|
||||
thirdParties: 0
|
||||
}
|
||||
for (let service of this.config.getServices()) {
|
||||
let analysis = analyzeService(service.href)
|
||||
stats.total++
|
||||
stats.secure += analysis.isSecure
|
||||
stats.thirdParties += analysis.isThirdParty
|
||||
}
|
||||
|
||||
let secure_pp = 100 * stats.secure / stats.total
|
||||
let indepencence_pp = 100 * (stats.total - stats.thirdParties) / stats.total
|
||||
let https_importance = this.config.get("https_importance")
|
||||
let privacy_score = secure_pp * https_importance + indepencence_pp * (1 - https_importance)
|
||||
|
||||
let privacy_report;
|
||||
if (privacy_score == 100) {
|
||||
privacy_report = "Data is sent securely and no third-party services are involved."
|
||||
}
|
||||
else if (privacy_score >= 85) {
|
||||
privacy_report = "Great privacy overall, but at some point it could be better."
|
||||
}
|
||||
else if (privacy_score >= 40) {
|
||||
privacy_report = "Decent privacy. You should pay attention what you're doing."
|
||||
}
|
||||
else privacy_report = "Transferring data is insecure and vulnerable to various threats."
|
||||
|
||||
document.getElementById("report-score").innerText = Math.round(privacy_score)
|
||||
document.getElementById("report").innerText = privacy_report
|
||||
|
||||
const phrase = " of the listed services are using secure connections"
|
||||
privacyBox(secure_pp, "icon-https", [
|
||||
{
|
||||
"from": 0,
|
||||
"name": "No encryption",
|
||||
"desc": "None" + phrase
|
||||
},
|
||||
{
|
||||
"from": 0.1,
|
||||
"name": "Poor encryption",
|
||||
"desc": "Only some" + phrase
|
||||
},
|
||||
{
|
||||
"from": 60,
|
||||
"name": "Fair encryption",
|
||||
"desc": "Most" + phrase
|
||||
},
|
||||
{
|
||||
"from": 90,
|
||||
"name": "Good encryption",
|
||||
"desc": "Nearly all" + phrase
|
||||
},
|
||||
{
|
||||
"from": 100,
|
||||
"name": "Full encryption",
|
||||
"desc": "All" + phrase
|
||||
}
|
||||
])
|
||||
|
||||
privacyBox(indepencence_pp, "icon-rocket", [
|
||||
{
|
||||
"from": 0,
|
||||
"name": "Not independent",
|
||||
"desc": "This server lists a lot of 3rd party services"
|
||||
},
|
||||
{
|
||||
"from": 40,
|
||||
"name": "Partially independent",
|
||||
"desc": "This server lists many 3rd party services"
|
||||
},
|
||||
{
|
||||
"from": 65,
|
||||
"name": "Mostly independent",
|
||||
"desc": "This server still lists some 3rd party services"
|
||||
},
|
||||
{
|
||||
"from": 100,
|
||||
"name": "Fully independent",
|
||||
"desc": "This server is free of 3rd party services"
|
||||
}
|
||||
])
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
export function analyzeService(url) {
|
||||
let isSiteSecure = (
|
||||
window.location.protocol == "https:" ||
|
||||
window.location.hostname == "localhost"
|
||||
)
|
||||
|
||||
let domain_base = window.location.hostname
|
||||
let isSecure = false
|
||||
let isThirdParty = true
|
||||
|
||||
if (url.startsWith("https://")) {
|
||||
isSecure = true
|
||||
}
|
||||
else if (!["http", "https"].includes(url.split("://")[0])) {
|
||||
isSecure = isSiteSecure
|
||||
}
|
||||
|
||||
if (isThirdParty) {
|
||||
let domain = url.split("://")
|
||||
if (domain.length > 1) {
|
||||
domain = domain[1]
|
||||
domain = domain.split("/")[0]
|
||||
domain = domain.split(":")[0]
|
||||
isThirdParty = !domain.includes(domain_base)
|
||||
}
|
||||
else {
|
||||
isThirdParty = false
|
||||
}
|
||||
}
|
||||
|
||||
return {isSecure, isThirdParty}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
export function privacyBox(privacyScore, icon_class, levels) {
|
||||
let name, desc
|
||||
levels = levels.reverse()
|
||||
|
||||
for (let i in levels) {
|
||||
let item = levels[i]
|
||||
if (item.from <= privacyScore) {
|
||||
name = levels[i].name
|
||||
desc = levels[i].desc
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
let item = document.createElement("div")
|
||||
item.innerHTML = `<i class="${icon_class}"></i>
|
||||
<div>
|
||||
<div class="title">${name}</div>
|
||||
<div class="subtitle">${desc}</div>
|
||||
</div>`
|
||||
|
||||
if (privacyScore < 30) item.classList.add("error")
|
||||
else if (privacyScore < 90) item.classList.add("warn")
|
||||
else if (privacyScore < 100) item.classList.add("prewarn")
|
||||
|
||||
document.getElementById("report-boxes").appendChild(item)
|
||||
return item
|
||||
}
|
||||
Reference in New Issue
Block a user