Skip to content

Instantly share code, notes, and snippets.

@or-shachar
Last active July 17, 2018 22:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save or-shachar/18d3563abbaca6e89d35aa92bb697a62 to your computer and use it in GitHub Desktop.
Save or-shachar/18d3563abbaca6e89d35aa92bb697a62 to your computer and use it in GitHub Desktop.
Github webhook handler digest handler
import org.apache.commons.codec.digest.{HmacAlgorithms, HmacUtils}
class WebHookHandler(webhookSecret:String) {
private val hmacDigest = new HmacUtils(HmacAlgorithms.HMAC_SHA_1, webhookSecret)
private val xHubSignaturePattern = "sha1=(.+)".r
private def validate(xHubSignature: String, body: String): Boolean = {
xHubSignature match {
case xHubSignaturePattern(sha1) => sha1 == hmacDigest.hmacHex(body)
case _ => false
}
}
private def handle(headers:Map[String,String], body:String):Unit = {
val validated = headers.get("x-hub-signature").map(xHubSignature=>validate(xHubSignature, body)).getOrElse(false)
if (validated){
headers.get("X-GitHub-Event") match {
case Some("pull_request") => ... //parse pullRequest structure
case Some("push") => ... //parse push event structure
case _ => Unit
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment