DiscourseConnect ユーザーデータを sync_sso ルートと同期する [JavaScript]

こんにちは。

会社のNode.jsバックエンドでこの機能を利用する必要があったため、興味のある方のために、Node.jsのcryptoBufferを使用したJavaScriptでの参照実装を以下に示します。

注:
一貫性を保つため、PHP実装と同じ変数値を使用しています。

API認証情報とSSOシークレットキーの設定

const apiKey = '4fe83002bb5fba8c9a61a65e5b4b0a3cf8233b0e4ccafc85ebd6607abab4651a';
const apiUser = 'system';
const connectSecret = 'jdhb19*Xh3!nu(#k';

SSOパラメータの設定

const ssoRecord = new URLSearchParams({
  external_id: 1,
  email: 'bob@example.com',
  username: 'bob',
  add_groups: 'eurorack',
  require_activation: true,
}).toString();

const ssoPayload = Buffer.from(ssoRecord, 'utf8').toString('base64');
const signature = crypto.createHmac('sha256', connectSecret).update(ssoPayload).digest('hex');

POSTリクエストの送信

const updatedUser = await fetch({ // または axios
  method: 'POST',
  url: 'https://forum.example.com/admin/users/sync_sso',
  headers: {
    'Api-Key': apiKey,
    'Api-Username': apiUser,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    sso: ssoPayload,
    sig: signature,
  })
}).then((response) => response.json());
「いいね!」 6