72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"crypto/ed25519"
|
|
"encoding/base64"
|
|
"encoding/hex"
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
const PublicKeyHex = "ab8287380d4f26b66b3e8067e179a2e304dcb3c4070963edd213cca9b225978f"
|
|
|
|
func VerifyLicenseFile() (*LicenseData, error) {
|
|
bytes, err := os.ReadFile("license.lic")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Keine Lizenzdatei gefunden")
|
|
}
|
|
|
|
var lic LicenseFile
|
|
if err := json.Unmarshal(bytes, &lic); err != nil {
|
|
return nil, fmt.Errorf("Lizenzdatei beschädigt")
|
|
}
|
|
|
|
pubBytes, _ := hex.DecodeString(PublicKeyHex)
|
|
publicKey := ed25519.PublicKey(pubBytes)
|
|
|
|
dataBytes, _ := json.Marshal(lic.Data)
|
|
sigBytes, err := base64.StdEncoding.DecodeString(lic.Signature)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Signatur ungültig")
|
|
}
|
|
|
|
if !ed25519.Verify(publicKey, dataBytes, sigBytes) {
|
|
return nil, fmt.Errorf("Lizenz-Signatur ungültig (Manipuliert?)")
|
|
}
|
|
|
|
expiry, err := time.Parse("2006-01-02", lic.Data.ExpiresAt)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Ungültiges Datumsformat")
|
|
}
|
|
if time.Now().After(expiry) {
|
|
return &lic.Data, fmt.Errorf("Lizenz abgelaufen am %s", lic.Data.ExpiresAt)
|
|
}
|
|
|
|
return &lic.Data, nil
|
|
}
|
|
|
|
func GetCurrentLicenseStatus(db *any) LicenseStatus {
|
|
lic, err := VerifyLicenseFile()
|
|
status := LicenseStatus{
|
|
IsValid: err == nil,
|
|
Message: "Gültig",
|
|
}
|
|
|
|
if err != nil {
|
|
status.Message = err.Error()
|
|
if lic != nil {
|
|
status.SchoolName = lic.SchoolName
|
|
status.ExpiresAt = lic.ExpiresAt
|
|
status.MaxUsers = lic.MaxUsers
|
|
}
|
|
return status
|
|
}
|
|
|
|
status.SchoolName = lic.SchoolName
|
|
status.ExpiresAt = lic.ExpiresAt
|
|
status.MaxUsers = lic.MaxUsers
|
|
|
|
return status
|
|
}
|