Page History

Home

Fabio edited this page on 19 May

Clone this wiki locally

WP OJS SSO Bridge

Plugin WordPress che trasforma il sito in un provider OpenID Connect per Open Journal Systems (OJS), esponendo lo stato di sottoscrizione utente come claim OIDC. È la metà "WordPress" del meccanismo SSO usato da GuIT - Gruppo Utilizzatori Italiani di TeX per guitex.org (WordPress) ↔ arstexnica.guitex.org (OJS).

La metà OJS vive nel repo companion ojs-wordpress-plugin (plugin ojsWpSsoSubscription).


Funzionalità

  • Flag booleano "Sottoscrizione OJS attiva" gestito dalla scheda utente WordPress e dalla lista utenti (azioni bulk attiva/disattiva).
  • Esposizione dello stato come claim OIDC personalizzato (default: subscription_active).
  • Checkbox "Desidero sottoscrivere la rivista" nel form di registrazione WordPress.
  • Raccolta dati di sottoscrizione (anagrafica, tipo di membership, consensi privacy) in registrazione e nel profilo.
  • Notifica email all'amministratore quando un utente richiede la sottoscrizione.
  • Upload obbligatorio della ricevuta di bonifico e (per studenti) del certificato di iscrizione, salvati nella Media Library sotto wp-content/uploads/file-utenti/{slug-utente}/{bonifico|certificato}.
  • Colonna "Subscription documents" nella lista utenti con link ai documenti.
  • Localizzazione italiana della schermata di autorizzazione OIDC (il plugin upstream la fornisce solo in inglese).

Dipendenze

  • WordPress ≥ 6.0
  • PHP ≥ 7.4
  • Plugin OpenID Connect Server di Automattic (deve essere installato e attivo prima di questo plugin).
  • Chiavi RSA per il server OIDC: generabili con wp eval 'OIDC\generateKeys();' o tramite lo script generate-oidc-keys.php presente nel workspace di deploy GuIT.

Installazione

Da release ZIP

  1. Scaricare l'ultima release ZIP dalla pagina Releases.
  2. wp-admin → Plugin → Aggiungi nuovo → Carica plugin → selezionare lo ZIP → Installa ora → Attiva.

Manuale via FTP/SSH

cd wp-content/plugins
unzip /path/to/wp-ojs-sso-bridge-X.Y.Z.zip
chown -R www-data:www-data wp-ojs-sso-bridge

Attivare poi da wp-admin → Plugin.

Generazione chiavi RSA OIDC (una tantum)

Aggiungere al wp-config.php il blocco generato da wp eval 'OIDC\generateKeys();' (o dallo script generate-oidc-keys.php di GuIT, da eliminare subito dopo l'uso).


Configurazione

wp-admin → Impostazioni → OJS SSO Bridge

Campo Valore consigliato Note
OJS Client ID ojs-arstexnica Identificativo arbitrario condiviso con OJS
OJS Client Secret (generato dal pulsante "Genera Secret") Stesso valore da incollare lato OJS
OJS Redirect URI https://arstexnica.guitex.org/openid/doAuthentication?provider=custom Mostrato dal plugin OJS openid
Claim name subscription_active Deve coincidere col campo "Claim name" del plugin OJS
Meta key ojs_subscription_active user_meta WordPress che mappa il claim
Abilita richiesta alla registrazione on Mostra il checkbox nel form
Notifica admin on Invia mail al booking della sottoscrizione

Architettura

sequenceDiagram
    participant OJS as OJS (arstexnica.guitex.org)
    participant WP as WordPress (guitex.org)
    participant User
    OJS->>WP: Authorize (PKCE / standard OIDC)
    User->>WP: Login + consenso (schermata "Autorizza" in IT)
    WP-->>OJS: id_token + access_token (claim subscription_active)
    OJS->>WP: UserInfo (Bearer access_token)
    WP-->>OJS: { sub, email, name, subscription_active: 1 }

Il plugin:

  1. Espone l'endpoint https://guitex.org/.well-known/openid-configuration (gestito dal plugin Automattic).
  2. Filtra id_token e UserInfo aggiungendo il claim subscription_active dal meta utente.
  3. Aggiunge campi e logica al form di registrazione/profilo.

Codice rilevante: vedere includes/class-oidc-bridge.php, includes/class-registration.php, includes/class-settings.php.


Personalizzazione

Cambiare nome claim / meta key

Le impostazioni accettano valori arbitrari; assicurarsi solo che WordPress e OJS abbiano lo stesso claimName.

Filtri WordPress disponibili

  • wp_ojs_sso_bridge_claim_value — sovrascrive il valore del claim prima dell'esposizione.
  • wp_ojs_sso_bridge_userinfo_extra — aggiunge ulteriori campi nella risposta UserInfo.

Localizzazione

I file .po/.mo sono in languages/. La traduzione italiana copre sia le stringhe del plugin sia il consent screen del plugin Automattic (gestito da class-oidc-server-it-locale.php).


Disinstallazione

uninstall.php rimuove le option create dal plugin e i meta utente legati alla sottoscrizione. Non elimina i file caricati in wp-content/uploads/file-utenti/ (per non distruggere documenti contabili): vanno cancellati manualmente.


Troubleshooting

Sintomo Causa probabile Fix
OJS riceve sempre subscription_active: 0 Claim non emesso in UserInfo o lato OJS si sta leggendo dal id_token cifrato Verificare la patch OpenIDHandler.php sul plugin OJS openid (vedi patches/openid-handler/ nel workspace GuIT).
UserInfo restituisce 401 access_token non salvato in sessione lato OJS Stessa patch sopra (salva access_token accanto a id_token).
Schermata "Autorizza" in inglese Locale del sito non it_* Settings → Generale → Lingua sito → Italiano.
Form di registrazione senza checkbox "Abilita richiesta alla registrazione" disattivato in Settings Riabilitare e svuotare le cache di pagina (se presenti).
Upload bonifico/certificato fallisce Limiti PHP troppo bassi Aumentare upload_max_filesize e post_max_size (256 MB consigliati).

Per la diagnostica end-to-end vedere diagnose-subscription.php nel workspace GuIT (/diagnose-subscription.php?user=<email> lato OJS).


Sviluppo

git clone https://niphredil.duckdns.org/git/fabio/wordpress-ojs-plugin.git
cd wordpress-ojs-plugin
# branch principale: main

PR e issue su GitBucket (link "Issues" / "Pull Requests" nel repo).

Build di una release

cd /Users/fabio.arrigoni/Downloads/Guitex
zip -r releases/wp-ojs-sso-bridge-X.Y.Z.zip wp-ojs-sso-bridge \
  -x 'wp-ojs-sso-bridge/.git/*' \
     'wp-ojs-sso-bridge/**/.DS_Store' \
     'wp-ojs-sso-bridge/**/*.bak*'

Licenza

GPL-2.0-or-later. Vedere file LICENSE (in arrivo) o https://www.gnu.org/licenses/gpl-2.0.html.


Storia delle versioni

Vedere readme.txt sezione Changelog.

  • 1.1.0 — Bonifico obbligatorio, certificato studente, colonna documenti nella lista utenti.
  • 1.0.1 — Consenso OIDC tradotto in italiano.
  • 1.0.0 — Release iniziale.