unify score and summary

This commit is contained in:
pluja 2024-02-14 22:13:38 +01:00
parent 31d13b18c9
commit 07f75a809d
2 changed files with 73 additions and 107 deletions

View File

@ -133,7 +133,7 @@ func (s *Server) handleScoreSummary(c iris.Context) {
return return
} }
summary := utils.ScoreSummary(service) _, summary := utils.ComputeScore(service)
c.Text(summary) c.Text(summary)
} }
@ -328,7 +328,7 @@ func (s *Server) handlePostRequestServiceForm(c iris.Context) {
service.KycLevel = data.KYCLevel service.KycLevel = data.KYCLevel
service.Attributes = data.Attributes service.Attributes = data.Attributes
service.Score = utils.ComputeScore(&service) service.Score, _ = utils.ComputeScore(&service)
// Save service to database // Save service to database
err := database.Pb.CreateService(service) err := database.Pb.CreateService(service)
@ -342,3 +342,38 @@ func (s *Server) handlePostRequestServiceForm(c iris.Context) {
// go utils.UpdateScore(sv) // go utils.UpdateScore(sv)
c.Redirect("/request/service?message=Success!", iris.StatusSeeOther) c.Redirect("/request/service?message=Success!", iris.StatusSeeOther)
} }
func (s *Server) handlePgp(c iris.Context) {
text := `
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Here's my public PGP key:
- -----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZczexBYJKwYBBAHaRw8BAQdA+X+cNkOv5SmauKLLw+xcEkcDQjVubZ/4Xj3d
5DNvgru0F3BsdWphIDxhZG1pbkBreWNub3QubWU+iJMEExYKADsWIQQEPOrx9H8d
Txv0tFhweQHG2o41CgUCZczexAIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIX
gAAKCRBweQHG2o41CjwVAQDpcxgeXK+2KiVzMkmLCXiAYU0hRhQmA4xwXDkqYxn7
dwD+KzHpcnTwnrK5ZLn3+ti9DVeURTv1lFf9TVZTKgovOAy4OARlzN7EEgorBgEE
AZdVAQUBAQdAvrCLlUmBr/RswvfC4hOGa5Som7CGQp0WzpkyETZmRh0DAQgHiHgE
GBYKACAWIQQEPOrx9H8dTxv0tFhweQHG2o41CgUCZczexAIbDAAKCRBweQHG2o41
ClZ1AQCwZ1XrRYLuM9d5mLXzbZVRjb5INoVXFrZbx9ZkAxKgFAD/dmJI/bUxPcVZ
f6cwP2HYnxD/i2C6ltaLK0SRrxI2XAM=
=Tnvi
- -----END PGP PUBLIC KEY BLOCK-----
Any important matters, will be signed with this key.
-----BEGIN PGP SIGNATURE-----
iHUEARYKAB0WIQQEPOrx9H8dTxv0tFhweQHG2o41CgUCZc0qQwAKCRBweQHG2o41
Ctx3AP9TBHliRKIXpGmfCWKL6sRHqyT/eQQMjONqaZikrcmdzAEA/ff2+nionjTr
mQXRsALQl2Fpw4nY/hIOYkdASomusAg=
=uT9S
-----END PGP SIGNATURE-----
`
c.Text(text)
}

View File

@ -4,33 +4,28 @@ import (
"fmt" "fmt"
"math" "math"
"github.com/rs/zerolog/log"
"pluja.dev/kycnot.me/database" "pluja.dev/kycnot.me/database"
) )
func ComputeScore(s *database.Service) int { func ComputeScore(s *database.Service) (int, string) {
const ( summary := fmt.Sprintf("SCORE BREAKDOWN - %s:\n", s.Name)
baseScore = 10
maxScore = 10
minScore = 0
bonusLow = 15
bonusMedium = 20
bonusHigh = 25
)
grade := float64(baseScore) grade := float64(10)
// KYC Level Adjustment // KYC Level Adjustment
switch s.KycLevel { switch s.KycLevel {
case 0: case 0:
grade = 8 grade = 8
summary += fmt.Sprintf("\n%-*s--> base score for KYC Level %d", 10, fmt.Sprintf("|| %v", grade), s.KycLevel)
case 1: case 1:
grade = 7 grade = 7
summary += fmt.Sprintf("\n%-*s--> base score for KYC Level %d", 10, fmt.Sprintf("|| %v", grade), s.KycLevel)
case 2: case 2:
grade = 6 grade = 6
summary += fmt.Sprintf("\n%-*s--> base score for KYC Level %d", 10, fmt.Sprintf("|| %v", grade), s.KycLevel)
case 3: case 3:
grade = 5 grade = 5
summary += fmt.Sprintf("\n%-*s--> base score for KYC Level %d", 10, fmt.Sprintf("|| %v", grade), s.KycLevel)
} }
// Attributes // Attributes
@ -38,10 +33,13 @@ func ComputeScore(s *database.Service) int {
switch attr.Rating { switch attr.Rating {
case "good": case "good":
grade += 0.1 grade += 0.1
summary += fmt.Sprintf("\n%-*s--> good attribute.", 10, "|| +0.1")
case "warn": case "warn":
grade -= 0.25 grade -= 0.25
summary += fmt.Sprintf("\n%-*s--> warn attribute.", 10, "|| -0.25")
case "bad": case "bad":
grade -= 0.5 grade -= 0.65
summary += fmt.Sprintf("\n%-*s--> bad attribute.", 10, "|| -0.65")
} }
} }
@ -51,22 +49,31 @@ func ComputeScore(s *database.Service) int {
} }
trPenalty := 0.0 trPenalty := 0.0
wrns := 0
for _, tr := range s.TosReviews { for _, tr := range s.TosReviews {
if tr.Warning { if tr.Warning {
trPenalty -= 0.1 trPenalty -= 0.02
wrns++
} }
} }
if trPenalty > 3 { if trPenalty > 3 {
trPenalty = 3 trPenalty = 3
} }
grade += float64(trPenalty) grade += float64(trPenalty)
if trPenalty != 0 {
summary += fmt.Sprintf("\n|| %-*f--> %d terms of service warnings.", 10, trPenalty, wrns)
}
// Cash/Monero Bonus // Cash/Monero Bonus
if s.Cash || s.Xmr || s.Btc { if s.Cash || s.Xmr || s.Btc {
grade += 0.5 grade += 0.25
summary += fmt.Sprintf("\n%-*s--> accepting Cash/BTC.", 10, "|| +0.25")
if s.Xmr { if s.Xmr {
grade += 0.25 grade += 0.25
summary += fmt.Sprintf("\n%-*s--> accepting XMR.", 10, "|| +0.25")
} }
} }
@ -86,115 +93,39 @@ func ComputeScore(s *database.Service) int {
// Tor URL Bonus // Tor URL Bonus
if len(s.OnionUrls) > 0 && s.OnionUrls[0] != "" { if len(s.OnionUrls) > 0 && s.OnionUrls[0] != "" {
grade += 0.5 grade += 0.5
summary += fmt.Sprintf("\n%-*s--> has Onion links.", 10, "|| +0.5")
} }
if s.Verified { if s.Verified {
if grade < 7.5 { if grade < 7.5 {
grade += 0.5 grade += 0.5
summary += fmt.Sprintf("\n%-*s--> verified bonus (only if <7.5).", 10, "|| +0.5")
} }
} }
if !isP2P && grade > 9.5 { if !isP2P && grade > 9.5 {
grade = 9 grade = 9
summary += fmt.Sprintf("\n%-*s--> Not P2P, score can't be 10.", 10, "|| +0.5")
} }
if isP2P || isOpenSource && grade < 8 { if isP2P {
grade += 0.5 grade += 0.5
summary += fmt.Sprintf("\n%-*s--> P2P bonus.", 10, "|| +0.5")
}
if isOpenSource && grade < 7.5 {
grade += 0.25
summary += fmt.Sprintf("\n%-*s--> Open Source bonus (if < 7.5).", 10, "|| +0.25")
} }
// Normalize the grade to be within 0-10 bounds // Normalize the grade to be within 0-10 bounds
grade = math.Min(maxScore, math.Max(minScore, grade)) grade = math.Min(10, math.Max(0, grade))
log.Debug().Msgf("Computed score for %s: %f", s.Name, math.RoundToEven(grade)) summary += "\n||---------------------------------------"
return int(math.RoundToEven(grade)) summary += fmt.Sprintf("\n|| %-*v--> Total (rounded to even)", 6, math.RoundToEven(grade)) // Call ComputeScore to get the actual score
}
func ScoreSummary(s *database.Service) string { return int(math.RoundToEven(grade)), summary
summary := fmt.Sprintf("SCORE BREAKDOWN - %s:\n", s.Name)
const leftPad = 10 // Adjust this based on your longest line
// KYC Level Adjustment
switch s.KycLevel {
case 0:
summary += fmt.Sprintf("\n%-*s--> base score for KYC Level 0", leftPad, "|| 8")
case 1:
summary += fmt.Sprintf("\n%-*s--> base score for KYC Level 1", leftPad, "|| 7")
case 2:
summary += fmt.Sprintf("\n%-*s--> base score for KYC Level 2", leftPad, "|| 6")
case 3:
summary += fmt.Sprintf("\n%-*s--> base score for KYC Level 3", leftPad, "|| 5")
}
// Attributes
for _, attr := range s.Expand["attributes"] {
switch attr.Rating {
case "good":
summary += fmt.Sprintf("\n%-*s--> good attribute.", leftPad, "|| +0.1")
case "warn":
summary += fmt.Sprintf("\n%-*s--> warn attribute.", leftPad, "|| -0.25")
case "bad":
summary += fmt.Sprintf("\n%-*s--> bad attribute.", leftPad, "|| -0.5")
}
}
// Tos Highlights Penalty (Corrected to reflect actual penalty logic)
trPenalty := 0.0
wrns := 0
for _, tr := range s.TosReviews {
if tr.Warning {
trPenalty -= 0.1
wrns++
}
}
if trPenalty < -3 {
trPenalty = -3
}
if trPenalty != 0 {
summary += fmt.Sprintf("\n|| %-*f--> %d terms of service warnings.", leftPad, trPenalty, wrns)
}
// Cash/Monero Bonus
if s.Cash || s.Xmr || s.Btc {
summary += fmt.Sprintf("\n%-*s--> accepting Cash/BTC.", leftPad, "|| +0.5")
if s.Xmr {
summary += fmt.Sprintf("\n%-*s--> monero bonus.", leftPad, "|| +0.25")
}
}
// Tor URL Bonus
if len(s.OnionUrls) > 0 && s.OnionUrls[0] != "" {
summary += fmt.Sprintf("\n%-*s--> having a Tor URL.", leftPad, "|| +0.5")
}
// Verified Bonus
if s.Verified {
summary += fmt.Sprintf("\n%-*s--> being verified (applies only if score was below 7.5 at this point).", leftPad, "|| +0.5")
}
// P2P/OpenSource Bonus
// Note: Since the original ComputeScore doesn't show the exact bonus amount for P2P/OpenSource,
// it's assumed to follow the similar logic as in ComputeScore for simplicity.
isP2P := false
isOpenSource := false
for _, attr := range s.Attributes {
if attr == database.AttributeP2P {
isP2P = true
}
if attr == database.AttributeOpenSource {
isOpenSource = true
}
}
if isP2P || isOpenSource {
summary += fmt.Sprintf("\n%-*s--> P2P/OpenSource bonus (applies if score was below 8).", leftPad, "|| +0.5")
}
summary += "\n||"
summary += fmt.Sprintf("\n|| Total: %v", ComputeScore(s)) // Call ComputeScore to get the actual score
summary += "\n(final score is rounded to even number)"
return summary
} }
/*func UpdateScore(s *ent.Service) error { /*func UpdateScore(s *ent.Service) error {