diff --git a/pkg/jsonsign/signhandler/sig.go b/pkg/jsonsign/signhandler/sig.go index 7c3ec8cc6..44ad13d05 100644 --- a/pkg/jsonsign/signhandler/sig.go +++ b/pkg/jsonsign/signhandler/sig.go @@ -34,6 +34,7 @@ import ( "camlistore.org/pkg/jsonsign" "camlistore.org/pkg/osutil" "camlistore.org/pkg/schema" + "camlistore.org/pkg/types/camtypes" "camlistore.org/third_party/code.google.com/p/go.crypto/openpgp" ) @@ -204,25 +205,23 @@ func (h *Handler) handleVerify(rw http.ResponseWriter, req *http.Request) { return } - m := make(map[string]interface{}) - // TODO: use a different fetcher here that checks memory, disk, // the internet, etc. fetcher := h.pubKeyFetcher + var res camtypes.VerifyResponse vreq := jsonsign.NewVerificationRequest(sjson, fetcher) if vreq.Verify() { - m["signatureValid"] = 1 - m["signerKeyId"] = vreq.SignerKeyId - m["verifiedData"] = vreq.PayloadMap + res.SignatureValid = true + res.SignerKeyId = vreq.SignerKeyId + res.VerifiedData = vreq.PayloadMap } else { - errStr := vreq.Err.Error() - m["signatureValid"] = 0 - m["errorMessage"] = errStr + res.SignatureValid = false + res.ErrorMessage = vreq.Err.Error() } rw.WriteHeader(http.StatusOK) // no HTTP response code fun, error info in JSON - httputil.ReturnJSON(rw, m) + httputil.ReturnJSON(rw, &res) } func (h *Handler) handleSign(rw http.ResponseWriter, req *http.Request) { diff --git a/pkg/types/camtypes/sign.go b/pkg/types/camtypes/sign.go new file mode 100644 index 000000000..d0a178030 --- /dev/null +++ b/pkg/types/camtypes/sign.go @@ -0,0 +1,29 @@ +/* +Copyright 2015 The Camlistore Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package camtypes + +// VerifyResponse is the JSON response for a signature verification request. +type VerifyResponse struct { + // SignatureValid is true if the signature is valid. + SignatureValid bool `json:"signatureValid"` + // ErrorMessage contains the error that occurred, if any. + ErrorMessage string `json:"errorMessage,omitempty"` + // SignerKeyId is the ID of the signing key. + SignerKeyId string `json:"signerKeyId,omitempty"` + // VerifiedData contains the JSON values from the payload that we signed. + VerifiedData map[string]interface{} `json:"verifiedData,omitempty"` +}