wp-m365-login/docs/wordpress-org-einreichung.md
friloo 8766927123
Add certificate authentication, in-app setup guides and security audit
Certificate (RFC 7523 client assertion) as an alternative to the client
secret: one-click generation of a 3072-bit RSA key pair with a
self-signed certificate, .cer download (public part only), own PEM
upload with validation, expiry display, encrypted key storage. Both the
authorization code exchange and the Graph client-credentials request
use the selected method. Step-by-step guides for secret, certificate
and the app registration are shown in the settings.

Security audit (docs/security-audit.md) and fixes:
- Multi-tenant mode ignored the unverified email claim: matching now
  uses the UPN only, or the email claim when xms_edov is true.
- Login starts are rate limited per client (30 per 10 minutes).
- Optional trusted proxy header for client IPs
  (M365_LOGIN_CLIENT_IP_HEADER / filter).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJxAHYdMfKPoN4koRc4Ci2
2026-09-22 15:04:32 +00:00

44 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Checkliste: Einreichung im WordPress-Plugin-Verzeichnis
Das Plugin ist so aufgebaut, dass es die [Richtlinien des Plugin-Verzeichnisses](https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/)
erfüllt. Vor der Einreichung unter <https://wordpress.org/plugins/developers/add/> bitte die folgenden Punkte durchgehen.
## 1. Vor dem Upload prüfen
- [ ] `Tested up to:` in `readme.txt` auf die **aktuelle WordPress-Version** setzen (das Review-Team lehnt veraltete Werte ab).
- [ ] `Stable tag:` in `readme.txt` und `Version:` in `m365-login.php` sowie `M365_LOGIN_VERSION` sind identisch.
- [ ] `Contributors:` in `readme.txt` enthält deinen **WordPress.org-Benutzernamen** (aktuell `friloo`).
- [ ] Übersetzungsdateien aktualisiert: `wp i18n make-pot . languages/m365-login.pot` (WP-CLI) oder `python3 bin/make-pot.py`, danach `python3 bin/compile-mo.py`.
- [ ] `bash bin/build-zip.sh` ausführen und `build/m365-login.zip` hochladen (Ordner im ZIP heißt `m365-login`, nicht `wp-m365-login`).
- [ ] Lokal den **Plugin Check** laufen lassen (Plugin „Plugin Check (PCP)“ installieren oder auf das CI-Ergebnis achten) er muss ohne Fehler durchlaufen.
## 2. Namens- und Marken-Regeln
- Slugs dürfen nicht mit `wp-` oder mit Markennamen wie `microsoft-` beginnen; deshalb heißt der Slug `m365-login` und der Plugin-Name „M365 Login“.
Sollte das Review-Team dennoch einen anderen Slug zuweisen (z. B. wegen Trademark-Bedenken bei „M365“), müssen **Text Domain**, Ordnername und `readme.txt` angepasst werden Suche nach `m365-login` im Repo.
- Der Name darf nicht suggerieren, dass das Plugin von Microsoft stammt. Beschreibungstexte verwenden deshalb Formulierungen wie „sign in with Microsoft“, nicht „official Microsoft plugin“.
- Das Microsoft-Logo ist eingebettet, damit der Button so aussieht, wie Nutzer es erwarten. Microsoft erlaubt die Verwendung des Logos für „Sign in with Microsoft“-Buttons gemäß den [Branding-Richtlinien](https://learn.microsoft.com/entra/identity-platform/howto-add-branding-in-apps). Ein Reviewer könnte trotzdem nachfragen der Hinweis auf diese Richtlinie reicht in der Regel.
## 3. Was bereits erfüllt ist
| Anforderung | Umsetzung |
| --- | --- |
| GPL-kompatible Lizenz | `LICENSE` (GPL-2.0), Header in `m365-login.php`, `readme.txt` |
| `readme.txt` im WP-Format | inkl. Pflichtabschnitt **External services** (Microsoft-Login- und Graph-Endpunkte, übertragene Daten, Links zu Nutzungsbedingungen/Datenschutz) |
| Keine externen Assets/CDNs | CSS/JS liegen im Plugin; einzige Netzwerkverbindungen gehen zu `login.microsoftonline.com` und (optional, Gruppenprüfung) `graph.microsoft.com` |
| Sanitizing / Escaping / Nonces | Settings API mit `sanitize_callback`, `esc_*` bei jeder Ausgabe, `check_ajax_referer` + `current_user_can` |
| Eindeutiges Präfix | `m365_login_` / `M365_Login_` für alle globalen Bezeichner |
| Kein Tracking, keine Telefon-nach-Hause-Funktion | |
| Saubere Deinstallation | `uninstall.php` entfernt Option, Transients und User-Meta (auch Multisite) |
| Keine minifizierten Dateien ohne Quelle | Alle Assets liegen unminifiziert vor |
| `Requires PHP` / `Requires at least` | 7.4 / 6.0 |
| Übersetzbar | Text Domain `m365-login`, `languages/m365-login.pot`, deutsche Übersetzung |
| Security-Review | `docs/security-audit.md` (Bedrohungsmodell, Befunde, Fixes) |
## 4. Nach der Freigabe
1. SVN-Zugang aus der Freigabe-Mail nutzen: `svn co https://plugins.svn.wordpress.org/m365-login`.
2. Inhalt von `build/m365-login/` nach `trunk/` kopieren, `assets/` aus `.wordpress-org/` befüllen (Icon, Banner, Screenshots).
3. `svn cp trunk tags/1.0.0` und committen.
4. Screenshots erstellen (siehe `== Screenshots ==` in `readme.txt`) und als `screenshot-1.png` … in `assets/` ablegen.
5. Optional: GitHub Action `10up/action-wordpress-plugin-deploy` einrichten, um Releases automatisch nach SVN zu spiegeln.