diff options
author | Jakob Odersky <jodersky@gmail.com> | 2015-04-22 15:06:49 +0200 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2015-04-22 15:24:00 +0200 |
commit | f79ee0e3999dfd04af306aced213f20b7f8e0904 (patch) | |
tree | ff9be23960cce44544a90bee37124d0cdcd2f60d /gpg/skeybase/src/main/scala/com/github/jodersky/skeybase/verification/WebsiteFileVerifier.scala | |
download | security-f79ee0e3999dfd04af306aced213f20b7f8e0904.tar.gz security-f79ee0e3999dfd04af306aced213f20b7f8e0904.tar.bz2 security-f79ee0e3999dfd04af306aced213f20b7f8e0904.zip |
initial commit
Diffstat (limited to 'gpg/skeybase/src/main/scala/com/github/jodersky/skeybase/verification/WebsiteFileVerifier.scala')
-rw-r--r-- | gpg/skeybase/src/main/scala/com/github/jodersky/skeybase/verification/WebsiteFileVerifier.scala | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/gpg/skeybase/src/main/scala/com/github/jodersky/skeybase/verification/WebsiteFileVerifier.scala b/gpg/skeybase/src/main/scala/com/github/jodersky/skeybase/verification/WebsiteFileVerifier.scala new file mode 100644 index 0000000..04cad1e --- /dev/null +++ b/gpg/skeybase/src/main/scala/com/github/jodersky/skeybase/verification/WebsiteFileVerifier.scala @@ -0,0 +1,39 @@ +package com.github.jodersky.skeybase +package verification + +import scala.concurrent.Future + + +import Verifier.extractSignedStatement +import Verifier.finalHost +import Verifier.verifyStatement +import Verifier.withRedirects +import akka.actor.ActorSystem +import openpgp.Backend +import spray.client.pipelining.Get +import spray.client.pipelining.WithTransformerConcatenation +import spray.client.pipelining.sendReceive +import spray.client.pipelining.sendReceive$default$3 +import spray.client.pipelining.unmarshal +import spray.httpx.SprayJsonSupport.sprayJsonUnmarshaller +import spray.json.DefaultJsonProtocol + +class WebsiteFileVerifier(backend: Backend) extends Verifier { + import Verifier._ + + def verify(fingerprint: String, proof: Proof)(implicit sys: ActorSystem) = { + import sys.dispatcher + + val pipeline = withRedirects(sendReceive) ~> finalHost(proof.nametag).tupled ~> unmarshal[String] + for ( + content <- pipeline(Get(proof.proofUrl)); + signed <- extractSignedStatement(content); + clear <- backend.verifySignature(signed, fingerprint); + verified <- verifyStatement(clear, "github", proof.nametag) + ) yield { + proof + } + } + +} +
\ No newline at end of file |