WP Manifestindependent plugin directory
manifest / integrations / sui-user-wallets

Sui User Wallets WP Registry grade B-. Medium-severity findings · 3 findingsWP RegistryMedium-severity findings · 3 findingsOpen the reportB-

WordPress Plugin für automatische Sui Wallet-Verwaltung - Custodial Wallets mit Auto-Update von GitHub

★ 0stars
28release downloads
v1.0.14latest · 9mo ago

Install

Download sui-user-wallets-v1.0.14.zip From the v1.0.14 release on GitHub, Jan 29, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/utakapp/sui-user-wallets/releases/download/v1.0.14/sui-user-wallets-v1.0.14.zip
Updates itself. It ships its own updater, so new versions appear under Dashboard → Updates.

Sui User Wallets - WordPress Plugin

Custodial Wallet Management für WordPress User

Automatische Sui Wallet-Erstellung und -Verwaltung für WordPress User. Ideal für Plattformen, wo User keine Blockchain-Erfahrung haben.

🎯 Features

  • ✅ Automatische Wallet-Erstellung bei User-Registration
  • ✅ Verschlüsselte Speicherung von Private Keys in WordPress DB
  • ✅ User-freundlich - Keine Blockchain-Kenntnisse erforderlich
  • ✅ Integration mit Sui Course Loyalty Plugin
  • ✅ Balance-Checks direkt von der Blockchain
  • ✅ Admin-Interface für Wallet-Verwaltung
  • ✅ Vercel API Integration für sichere Wallet-Generierung

📋 Voraussetzungen

  1. WordPress 5.0+
  2. PHP 7.4+
  3. Vercel API deployed (siehe ../vercel-api/README.md)
  4. Optional: Sui Course Loyalty Plugin für automatische Badge-Zuweisung

🚀 Installation

Schritt 1: Plugin hochladen

  1. Lade das gesamte wordpress-plugin-wallet Verzeichnis hoch:

    • Via FTP: /wp-content/plugins/sui-user-wallets/
    • Oder: Packe als ZIP und installiere über WordPress Admin → Plugins
  2. Gehe zu WordPress Admin → Plugins

  3. Aktiviere "Sui User Wallets"

Schritt 2: Vercel API konfigurieren

  1. Gehe zu WordPress Admin → User Wallets → User Wallets (Einstellungen)

  2. Fülle API Integration aus:

    Vercel API URL:

    https://sui-loyalty-vercel-api.vercel.app

    API Secret Key:

    uPHYR1+HfXT6fE+4tJaU7zUk2qVsyvDAY4Q0tUhIdrA=
  3. Einstellungen:

    • ☑ Automatische Wallet-Erstellung bei User-Registration
    • ☑ Private Key Verschlüsselung (Empfohlen)
    • ☑ User dürfen Private Keys exportieren (Optional)
    • Netzwerk: Testnet (oder Mainnet für Production)
  4. Klicke "Änderungen speichern"

Schritt 3: Wallets für existierende User erstellen (Optional)

Falls Sie bereits User haben:

  1. Auf der Einstellungsseite sehen Sie: "Users ohne Wallet: X"
  2. Klicken Sie "Wallets für alle existierenden Users erstellen"
  3. Das Plugin erstellt automatisch Wallets für alle User

🎨 Verwendung

Als Administrator

Alle Wallets ansehen

WordPress Admin → User Wallets → All Wallets

Zeigt Liste aller User-Wallets:

  • User Name & Email
  • Wallet Address
  • Balance
  • Erstellungsdatum

User-Wallet verwalten

WordPress Admin → Users → Edit User → Sui Wallet Sektion

Für jeden User sehen Sie:

  • Wallet Address (mit Copy-Button)
  • Balance (mit Refresh-Button)
  • Private Key anzeigen (falls aktiviert)
  • Wallet erstellen (falls noch keine vorhanden)

Als User (Frontend)

Shortcode: Wallet anzeigen

Füge diesen Shortcode auf einer Seite ein:

[sui_user_wallet]

Zeigt dem eingeloggten User:

  • Seine Wallet-Adresse
  • Balance
  • Copy-Button

🔗 Integration mit Loyalty Plugin

Das Wallet-Plugin integriert sich automatisch mit Sui Course Loyalty:

Automatische Workflow

  1. User registriert sich → Wallet wird automatisch erstellt
  2. User kauft Kurs (via PMPro) → Wallet-Check & Badge-Request
  3. Badge wird erstellt → Automatisch an User-Wallet gesendet
  4. Progress Update → Auf User-Wallet-Badge angewendet

Manuelle Integration

Falls Sie das Loyalty-Plugin manuell verwenden:

// Hole User Wallet Address
$wallet_manager = new SUW_Wallet_Manager();
$address = $wallet_manager->get_user_wallet_address($user_id);

// Verwende Adresse für Badge-Erstellung
// ...

🔒 Sicherheit

Private Key Verschlüsselung

Aktiviert (Empfohlen):

  • Private Keys werden mit AES-256-CBC verschlüsselt
  • Encryption Key basiert auf WordPress AUTH_KEY + SECURE_AUTH_KEY
  • Keys sind in der DB nicht im Klartext lesbar

Wichtig: Stelle sicher, dass AUTH_KEY und SECURE_AUTH_KEY in wp-config.php definiert sind!

Private Key Export

Aktiviert (Standard):

  • Admins können Private Keys exportieren
  • Jeder Export wird geloggt
  • User können ihre eigenen Keys sehen

Deaktiviert:

  • Niemand kann Private Keys exportieren
  • Höhere Sicherheit, aber User können Wallet nicht woanders verwenden

Empfehlung für Production:

  • Deaktivieren, falls User ihre Wallets nicht exportieren müssen
  • Aktivieren, falls User Wallet-Ownership haben sollen

Best Practices

  1. Backups:

    • Regelmäßige DB-Backups erstellen
    • Private Keys gehen verloren, wenn DB verloren geht
  2. Zugriffsrechte:

    • Nur vertrauenswürdige Admins sollten Zugriff haben
    • Private Key Export nur für Super-Admins aktivieren
  3. Testnet vs Mainnet:

    • Teste IMMER auf Testnet zuerst
    • Auf Mainnet haben Wallets echte SUI-Coins
  4. AUTH_KEY Security:

    • Ändere niemals AUTH_KEY in wp-config.php nach Wallet-Erstellung
    • Sonst können Private Keys nicht mehr entschlüsselt werden!

🧪 Testing

Test 1: Wallet-Generierung

  1. Gehe zu Users → Add New
  2. Erstelle einen Test-User
  3. Gehe zu User Wallets → All Wallets
  4. Prüfe ob Wallet automatisch erstellt wurde

Test 2: Balance-Check

  1. Gehe zu Users → Edit User
  2. Scrolle zu Sui Wallet Sektion
  3. Klicke "Refresh" bei Balance
  4. Balance sollte von Blockchain geladen werden (0.0 SUI bei neuer Wallet)

Test 3: Private Key Export

  1. Aktiviere "User dürfen Private Keys exportieren" in Einstellungen
  2. Gehe zu User-Profil
  3. Klicke "Private Key anzeigen"
  4. Private Key sollte angezeigt werden (suiprivkey1...)

Test 4: Loyalty Integration

Voraussetzung: Sui Course Loyalty Plugin installiert

  1. Erstelle Badge Request für Test-User
  2. Wallet-Adresse sollte automatisch verwendet werden
  3. Badge sollte an User-Wallet gesendet werden

📊 API Endpoints

Das Plugin verwendet folgende Vercel API Endpoints:

POST /api/generate-wallet

Erstellt neue Sui Wallet

Response:

{
  "success": true,
  "data": {
    "address": "0x...",
    "privateKey": "suiprivkey1...",
    "network": "testnet"
  }
}

POST /api/get-balance

Holt Balance von Blockchain

Request:

{
  "address": "0x..."
}

Response:

{
  "success": true,
  "data": {
    "address": "0x...",
    "balance": "1.5",
    "network": "testnet"
  }
}

🗄️ Datenbank

Tabelle: wp_sui_user_wallets

Feld Typ Beschreibung
id bigint Primary Key
user_id bigint WordPress User ID
wallet_address varchar(66) Sui Address (0x...)
encrypted_private_key text Verschlüsselter Private Key
created_at datetime Erstellungszeitpunkt
last_balance_check datetime Letzter Balance-Check
cached_balance varchar(50) Gecachte Balance in SUI

🔧 Troubleshooting

Fehler: "API Fehler: Could not resolve host"

Problem: WordPress kann Vercel API nicht erreichen

Lösung:

  1. Prüfe Vercel API URL (korrekt eingegeben?)
  2. Teste im Browser: https://sui-loyalty-vercel-api.vercel.app/api/hello
  3. Prüfe Server-Firewall (erlaubt ausgehende HTTPS Requests?)

Fehler: "Encryption failed"

Problem: PHP OpenSSL Extension fehlt

Lösung:

# Ubuntu/Debian
sudo apt-get install php-openssl

# CentOS/RHEL
sudo yum install php-openssl

# Restart Apache/Nginx
sudo service apache2 restart

Fehler: "Decryption failed"

Problem: AUTH_KEY wurde geändert nach Wallet-Erstellung

Lösung:

  • Kritisch! Keys können nicht mehr entschlüsselt werden
  • Restore old AUTH_KEY from backup
  • Oder: Erstelle neue Wallets für alle User (alte gehen verloren)

Wallets werden nicht automatisch erstellt

Problem: Auto-Create ist deaktiviert

Lösung:

  1. Gehe zu User Wallets → Einstellungen
  2. Aktiviere ☑ "Automatisch Wallet für neue User erstellen"
  3. Für existierende User: Klicke "Wallets für alle existierenden Users erstellen"

📝 FAQ

Sind Custodial Wallets sicher?

Pros:

  • User-freundlich, keine Blockchain-Kenntnisse nötig
  • Keine Gefahr, dass User Private Keys verlieren
  • Einfache Integration

Cons:

  • Platform hat Kontrolle über User-Wallets
  • Bei DB-Hack könnten Private Keys kompromittiert werden
  • User müssen der Platform vertrauen

Empfehlung:

  • Für kleine Beträge (Badges, kleine NFTs): ✅ Gut geeignet
  • Für große Werte: ❌ Besser Non-Custodial (User verwaltet selbst)

Können User ihre Wallets exportieren?

Ja, falls "User dürfen Private Keys exportieren" aktiviert ist:

  1. User sieht Private Key in seinem Profil
  2. Kann ihn in Sui Wallet importieren (z.B. Sui Wallet Browser Extension)
  3. Hat dann volle Kontrolle außerhalb von WordPress

Was passiert bei User-Löschung?

Standardmäßig: Wallet bleibt in DB

Option 1: Manuelles Cleanup

  • Admin löscht Wallet manuell aus All Wallets

Option 2: Automatisches Cleanup (TODO für v2.0)

  • Hook auf deleted_user Event
  • Wallet wird automatisch gelöscht

Wie viele Wallets kann ich erstellen?

Vercel Free Tier:

  • 100,000 Function Invocations/Monat
  • = 100,000 Wallet-Generierungen

Kosten:

  • Testnet: Kostenlos
  • Mainnet: ~0.001 SUI pro Wallet-Creation Transaction (falls nötig)

🚀 Roadmap

  • [ ] Bulk Wallet Creation Interface
  • [ ] Wallet Import (User bringt eigene Wallet)
  • [ ] Multi-Signature Support
  • [ ] Wallet Recovery via Email
  • [ ] Gas-less Transactions (Platform zahlt Gas)
  • [ ] Export User Wallet History
  • [ ] Analytics Dashboard

📄 Lizenz

MIT

💬 Support

GitHub Repository: https://github.com/utakapp/sui-loyalty-vercel-api

Issues: https://github.com/utakapp/sui-loyalty-vercel-api/issues


Status: ✅ Production Ready (Testnet) Version: 1.0.0 Letzte Aktualisierung: 12. Januar 2026

Releases

15 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v1.0.14 latest
Jan 29, 2026 9mo ago
sui-user-wallets-v1.0.14.zip
4
Jan 25, 2026 9mo ago
sui-user-wallets-v1.0.13-fixed.zip
1
Jan 25, 2026 9mo ago
sui-user-wallets-v1.0.12.zip
6
Jan 23, 2026 9mo ago
sui-user-wallets-v1.0.11.zip
0
Jan 21, 2026 9mo ago
sui-user-wallets-v1.0.10.zip
2
Jan 19, 2026 9mo ago
sui-user-wallets-v1.0.9.zip
4
Jan 14, 2026 9mo ago
tag only
—
Jan 14, 2026 9mo ago
sui-user-wallets-1.0.7.zip
3
Jan 14, 2026 9mo ago
sui-user-wallets-1.0.6.zip
1
Jan 14, 2026 9mo ago
sui-user-wallets-1.0.5.zip
2
Jan 13, 2026 9mo ago
sui-user-wallets-1.0.4.zip
1
Jan 13, 2026 9mo ago
sui-user-wallets-1.0.3.zip
1
Jan 13, 2026 9mo ago
sui-user-wallets-1.0.2.zip
3
Jan 13, 2026 9mo ago
sui-user-wallets-1.0.1.zip
0
Jan 13, 2026 9mo ago
sui-user-wallets-1.0.0.zip
0
B- grade

Security

Sui User Wallets 1.0.14 · audited by WP Registry

Medium-severity findings.

1 medium 2 low
Audited release
1.0.14
Findings
3
Worst severity
medium
Content hash
130a99062f5b0c16822e494e…

Findings

  • medium Wallet backups stored in public uploads directory with predictable filenames

    information_disclosure

    SUW_Backup_Restore::create_backup() serialises every row of the wallets table (user_id, wallet_address, encrypted_private_key) and writes it to uploads/sui-wallet-backups/backup-<Y-m-d-His>.enc with mkdir 0755 and no .htaccess, index.php or random component. The directory is web-served, so anyone can download a backup by enumerating timestamps (86,400 candidates per day) or via directory listing. When the 'suw_encryption_enabled' option is off, SUW_Wallet_Crypto::encrypt() returns plain base64, so the file and every private key inside are trivially decodable. Even with encryption on, ciphertext of all custodial keys leaves the server boundary.

    includes/class-backup-restore.php:43-53

    Recommendation

    Store backups outside the web root (or in a directory protected by deny-all .htaccess/index.php), add a random unguessable component to file names, and always encrypt regardless of the encryption toggle.

  • low Private keys stored as plain base64 when encryption toggle disabled; DB-credential key fallback

    insecure_config

    An admin-facing checkbox (suw_encryption_enabled) makes encrypt() store custodial private keys as base64 plaintext in the database, and when AUTH_KEY/SECURE_AUTH_KEY are missing the AES key is derived from DB_NAME.DB_USER.DB_PASSWORD.DB_HOST. Toggling the option also breaks decryption of existing keys. Any SQL read primitive elsewhere on the site then yields spendable keys.

    includes/class-wallet-crypto.php:17-22,84-96

    Recommendation

    Remove the plaintext option; always encrypt private keys with a dedicated secret (e.g. a constant in wp-config.php) and use authenticated encryption (AES-GCM / sodium_crypto_secretbox).

  • low Debug / maintenance scripts shipped and directly web-accessible

    dev_tool_in_production

    debug-update-check.php bootstraps wp-load.php and is reachable at /wp-content/plugins/sui-user-wallets/debug-update-check.php. It is gated by manage_options, but performs state changes on GET without a nonce (?clear_cache=1 deletes the suw_github_update transient and the core update_plugins site transient, CSRF-able against an admin) and prints transient contents with print_r unescaped. Further root scripts (fix-table.php, force-update-check.php, debug-test.php, test-notice.php) and a second plugin header (debug-helper/debug-helper.php) are shipped in the release.

    debug-update-check.php:10-15,113-137

    Recommendation

    Remove debug/maintenance scripts from release builds (or exclude via .distignore); if kept, add nonces to state-changing actions and escape output.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.