Installation de Discourse sur un VPS auto-hébergé : un processus avec FAQ

comme je l’ai dit plus haut :

et ici vous avez posté :

que savez-vous de MiniOrange ? L’offre gratuite semble être limitée à quelques utilisateurs seulement, et donc cela pourrait vous coûter cher à 49$/mois pour l’offre de base :

la recherche et la lecture attentive sont essentielles pour planifier ce que vous souhaitez accomplir.

savez-vous écrire un script Velo pour Wix ?

peut-être une solution JavaScript

je pense que vous devrez mettre en place un point de terminaison API personnalisé directement sur votre site Wix pour recevoir les demandes de connexion depuis Discourse. Cela semble nécessiter du code JavaScript dans un module Velo avec un fichier appelé http-functions.js.

Cela interceptera l’utilisateur depuis Discourse, redirigera et vérifiera sa session Wix connectée, générera une charge utile signée et, espérons-le, le renverra en toute sécurité vers le forum.

quelque chose comme ceci peut-être :

import { ok, redirect, badRequest } from 'wix-http-functions';
import { currentMember } from 'wix-members-backend';
import crypto from 'crypto';

// choisissez une chaîne aléatoire sécurisée pour le secret 

const DISCOURSE_SECRET = "VOTRE_SUPER_SECRET_STRING_HERE"; 

export async function get_discourseSso(request) {
    const query = request.query;
    const payload = query.sso;
    const sig = query.sig;

    if (!payload || !sig) {
        return badRequest({ body: "Paramètres SSO manquants" });
    }

    // valider la signature entrante de Discourse

    const computedSig = crypto.createHmac('sha256', DISCOURSE_SECRET).update(payload).digest('hex');
    if (computedSig !== sig) {
        return badRequest({ body: "Signature cryptographique invalide" });
    }

    // vérifier si l'utilisateur est connecté à Wix

    const member = await currentMember.getMember({ fieldsets: ['FULL'] });
    
    // analyser la charge utile entrante pour récupérer le nonce de suivi unique

    const decodedPayload = Buffer.from(payload, 'base64').toString('ascii');
    const params = new URLSearchParams(decodedPayload);
    const nonce = params.get('nonce');

    if (!member) {
        // Si non connecté, forcez-le à se connecter à Wix d'abord, puis revenez ici
        const loginUrl = `https://yourwixsite.com{encodeURIComponent(request.url)}`;
        return redirect(loginUrl);
    }

    // construire la charge utile utilisateur pour Discourse

    const userPayload = `nonce=${nonce}&email=${encodeURIComponent(member.loginEmail)}&external_id=${member._id}&username=${encodeURIComponent(member.profile.nickname || member._id)}&name=${encodeURIComponent(member.contactDetails.firstName + ' ' + member.contactDetails.lastName)}`;

    // chiffrer et signer la charge utile utilisateur
    const base64Payload = Buffer.from(userPayload).toString('base64');
    const returnSig = crypto.createHmac('sha256', DISCOURSE_SECRET).update(base64Payload).digest('hex');

    // rediriger vers Discourse en tant qu'utilisateur connecté
    const discourseReturnUrl = `https://yourforum.com{encodeURIComponent(base64Payload)}&sig=${returnSig}`;
    return redirect(discourseReturnUrl);
}

vous devrez également remplacer l’URL de votre forum ici

il y aura aussi une configuration DiscourseConnect, mais ne faites aucune de ces choses jusqu’à ce que vous ayez un forum auto-hébergé fonctionnel sans erreurs.

je ne suis pas un expert en la matière et je ne connais presque rien à Wix, donc aucune garantie que cette solution fonctionne. Je vous donne simplement un exemple de méthode proposée pour illustrer la complexité.