Skeleton complete. Few functions still missing

pull/1/head
KatolaZ 8 years ago
parent b3ca09586c
commit b2b083e059

@ -6,7 +6,7 @@ import (
"golang.org/x/crypto/openpgp" "golang.org/x/crypto/openpgp"
"os" "os"
"strings" "strings"
"log" // "log"
) )
func CommitToString(commit *git.Commit) string { func CommitToString(commit *git.Commit) string {
@ -23,10 +23,12 @@ func CommitToString(commit *git.Commit) string {
} }
// FIXME: RETURN THE ENTITY PROVIDED BY THE CHECK, OR nil // FIXME: RETURN THE ENTITY PROVIDED BY THE CHECK, OR nil
func check_signature(commit *git.Commit, keyring *openpgp.KeyRing) (signature, signed string, err error) { func check_signature(commit *git.Commit, keys []*openpgp.KeyRing) (signature, signed string, err error) {
signature, signed, err = commit.ExtractSignature() signature, signed, err = commit.ExtractSignature()
if err == nil { if err == nil {
for _, keyring := range keys {
_, err_sig := _, err_sig :=
openpgp.CheckArmoredDetachedSignature(*keyring, strings.NewReader(signed), openpgp.CheckArmoredDetachedSignature(*keyring, strings.NewReader(signed),
@ -38,6 +40,7 @@ func check_signature(commit *git.Commit, keyring *openpgp.KeyRing) (signature, s
} }
err = err_sig err = err_sig
} }
}
return "", "", err return "", "", err
} }
@ -46,7 +49,7 @@ func check_signature(commit *git.Commit, keyring *openpgp.KeyRing) (signature, s
// traverse all the commits between two references, looking for scorsh // traverse all the commits between two references, looking for scorsh
// commands // commands
// fixme: we don't have just one keyring here.... // fixme: we don't have just one keyring here....
func walk_commits(msg SCORSHmsg, keyring openpgp.KeyRing) int { func walk_commits(msg SCORSHmsg, w *SCORSHworker) error {
fmt.Printf("Inside parse_commits\n") fmt.Printf("Inside parse_commits\n")
@ -58,7 +61,7 @@ func walk_commits(msg SCORSHmsg, keyring openpgp.KeyRing) int {
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "Error while opening repository %s (%s)\n", fmt.Fprintf(os.Stderr, "Error while opening repository %s (%s)\n",
reponame, err) reponame, err)
return SCORSH_ERR_NO_REPO return SCORSHerr(SCORSH_ERR_NO_REPO)
} }
old_rev_oid, err := git.NewOid(old_rev) old_rev_oid, err := git.NewOid(old_rev)
@ -66,7 +69,7 @@ func walk_commits(msg SCORSHmsg, keyring openpgp.KeyRing) int {
oldrev_commit, err := repo.LookupCommit(old_rev_oid) oldrev_commit, err := repo.LookupCommit(old_rev_oid)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "Commit: %s does not exist\n", old_rev) fmt.Fprintf(os.Stderr, "Commit: %s does not exist\n", old_rev)
return SCORSH_ERR_NO_COMMIT return SCORSHerr(SCORSH_ERR_NO_COMMIT)
} }
new_rev_oid, err := git.NewOid(new_rev) new_rev_oid, err := git.NewOid(new_rev)
@ -74,7 +77,7 @@ func walk_commits(msg SCORSHmsg, keyring openpgp.KeyRing) int {
newrev_commit, err := repo.LookupCommit(new_rev_oid) newrev_commit, err := repo.LookupCommit(new_rev_oid)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "Commit: %s does not exist\n", new_rev) fmt.Fprintf(os.Stderr, "Commit: %s does not exist\n", new_rev)
return SCORSH_ERR_NO_COMMIT return SCORSHerr(SCORSH_ERR_NO_COMMIT)
} }
cur_commit := newrev_commit cur_commit := newrev_commit
@ -85,17 +88,21 @@ func walk_commits(msg SCORSHmsg, keyring openpgp.KeyRing) int {
if err == nil { if err == nil {
fmt.Printf("%s", CommitToString(commit)) fmt.Printf("%s", CommitToString(commit))
//signature, signed, err := check_signature(commit, &keyring) // We should look for scorsh-tags, and if the commit has any,
_, _, err := check_signature(commit, &keyring) // check if it can be verified by any of the keyrings associated
if err != nil { // with the scorsh-tag
log.Printf("%s\n", SCORSHErr(SCORSH_ERR_SIGNATURE))
} //signature, signed, err := check_signature(commit, &keyring)
//_, _, err := check_signature(commit, w.keys)
//if err != nil {
// log.Printf("%s\n", SCORSHerr(SCORSH_ERR_SIGNATURE))
//
//}
cur_commit = commit.Parent(0) cur_commit = commit.Parent(0)
} else { } else {
fmt.Printf("Commit %x not found!\n", cur_commit.Id()) fmt.Printf("Commit %x not found!\n", cur_commit.Id())
return SCORSH_ERR_NO_COMMIT return SCORSHerr(SCORSH_ERR_NO_COMMIT)
} }
} }
return 0 return nil
} }

@ -1,8 +1,8 @@
package main package main
import ( import (
"errors"
"flag" "flag"
"fmt"
"log" "log"
) )
@ -10,7 +10,7 @@ import (
var conf_file = flag.String("c", "./scorsh.cfg", "Configuration file for SCORSH") var conf_file = flag.String("c", "./scorsh.cfg", "Configuration file for SCORSH")
func SCORSHErr(err int) error { func SCORSHerr(err int) error {
var err_str string var err_str string
@ -28,8 +28,7 @@ func SCORSHErr(err int) error {
default: default:
err_str = "Generic Error" err_str = "Generic Error"
} }
return fmt.Errorf("%s", err_str)
return errors.New(err_str)
} }

@ -14,7 +14,7 @@ func parse_request(fname string) (SCORSHmsg, error) {
_, err := os.Open(fname) _, err := os.Open(fname)
if err != nil { if err != nil {
log.Printf("Unable to open file: %s\n", fname) log.Printf("Unable to open file: %s\n", fname)
return ret, SCORSHErr(SCORSH_ERR_NO_FILE) return ret, SCORSHerr(SCORSH_ERR_NO_FILE)
} }
return ret, nil return ret, nil

Loading…
Cancel
Save