Skip to content

add webhook to discord BIGCity virtual office #4

@islamicity

Description

@islamicity

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});
});
3. Menjalankan Server:

  • Simpan script di atas ke dalam file server.js.
  • Jalankan server dengan node server.js.

Menguji Webhook dengan Secret

Setelah setup selesai:

  • Lakukan perubahan di repository GitHub Anda (misalnya, push commit baru).
  • GitHub akan mengirim payload ke server Anda dengan header x-hub-signature-256.
  • Server Anda akan memverifikasi signature menggunakan secret yang Anda tetapkan.
  • Jika verifikasi berhasil, server akan memproses payload dan mengirim pesan ke Discord.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions