islamicity / VirtualOffice

Software software penunjang pembangunan dan pengembangan virtualoffice.islamicity.tv
0 stars 1 forks source link

add webhook to discord BIGCity virtual office #4

Open islamicity opened 3 weeks ago

islamicity commented 3 weeks ago

Kolom "Secret" di pengaturan webhook GitHub digunakan untuk menambahkan lapisan keamanan tambahan pada webhook. Secret ini adalah token yang hanya diketahui oleh GitHub dan server Anda, yang digunakan untuk memastikan bahwa payload yang diterima oleh server Anda benar-benar berasal dari GitHub.

Cara Mengisi Kolom "Secret" di GitHub Webhook

  1. Pilih atau Buat Secret:

    • Anda dapat memilih secret apa pun yang ingin Anda gunakan. Ini bisa berupa string acak atau frasa yang sulit ditebak. Misalnya: my_super_secret_token_12345.
  2. Masukkan Secret ke dalam Pengaturan Webhook di GitHub:

    • Buka repository Anda di GitHub.
    • Pergi ke "Settings" -> "Webhooks".
    • Klik "Add webhook".
    • Tempel URL webhook Discord di bagian "Payload URL".
    • Pilih "application/json" sebagai content type.
    • Pilih event yang ingin Anda trigger (misalnya, push event).
    • Masukkan secret yang telah Anda pilih di kolom "Secret".
    • Klik "Add webhook".
  3. Verifikasi Secret di Server Anda:

    • Pada server Anda, Anda perlu memverifikasi secret untuk memastikan payload yang diterima benar-benar dari GitHub. Berikut adalah contoh cara melakukannya dalam Node.js:

Contoh Verifikasi Secret di Node.js

  1. Menginstal Dependensi:

    • Anda memerlukan beberapa dependensi tambahan. Jalankan perintah berikut untuk menginstalnya:

      npm install express body-parser crypto

  2. Script Server dengan Verifikasi Secret:

const express = require('express'); const bodyParser = require('body-parser'); const crypto = require('crypto'); const axios = require('axios');

const app = express(); app.use(bodyParser.json());

const DISCORD_WEBHOOK_URL = 'YOUR_DISCORD_WEBHOOK_URL'; const GITHUB_SECRET = 'my_super_secret_token_12345'; // Sama dengan secret yang diisi di GitHub

function verifySignature(req, res, buf, encoding) { const signature = req.headers['x-hub-signature-256']; if (!signature) { res.status(401).send('Signature missing'); return; }

const hmac = crypto.createHmac('sha256', GITHUB_SECRET); const digest = sha256=${hmac.update(buf).digest('hex')}; if (signature !== digest) { res.status(401).send('Signature mismatch'); } }

app.use(bodyParser.json({ verify: verifySignature }));

app.post('/webhook', (req, res) => { const githubPayload = req.body; const discordMessage = { content: New push by ${githubPayload.pusher.name}:\n${githubPayload.head_commit.message}\n<${githubPayload.head_commit.url}> };

axios.post(DISCORD_WEBHOOK_URL, discordMessage) .then(() => { res.status(200).send('Webhook received and processed'); }) .catch((error) => { console.error('Error sending message to Discord:', error); res.status(500).send('Error processing webhook'); }); });

const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(Server is listening on port ${PORT}); });

  1. Menjalankan Server:
    • Simpan script di atas ke dalam file server.js.
    • Jalankan server dengan node server.js.

Menguji Webhook dengan Secret

Setelah setup selesai:

Dengan langkah-langkah ini, Anda dapat memastikan bahwa payload yang diterima oleh server Anda benar-benar berasal dari GitHub, meningkatkan keamanan integrasi webhook Anda.

islamicity commented 3 weeks ago

belum OK ?