Skip to content
This repository has been archived by the owner on Jul 16, 2021. It is now read-only.

Commit

Permalink
Implement empty response
Browse files Browse the repository at this point in the history
  • Loading branch information
gdbelvin committed Aug 20, 2015
1 parent 48b35a5 commit d8f77e7
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 8 deletions.
30 changes: 27 additions & 3 deletions keyserver/key_server.go
Expand Up @@ -16,15 +16,18 @@
package keyserver

import (
"encoding/hex"

"github.com/golang/protobuf/proto"
"github.com/google/e2e-key-server/auth"
"github.com/google/e2e-key-server/merkle"
"github.com/google/e2e-key-server/storage"
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"

corepb "github.com/google/e2e-key-server/proto/core"
v2pb "github.com/google/e2e-key-server/proto/v2"
context "golang.org/x/net/context"
proto3 "google/protobuf"
)

Expand Down Expand Up @@ -53,17 +56,38 @@ func (s *Server) GetUser(ctx context.Context, in *v2pb.GetUserRequest) (*v2pb.En
if err != nil {
return nil, err
}
vuf, err := hex.DecodeString(index)
if err != nil {
return nil, err
}

e, err := s.s.Read(ctx, index)
entryStorage, err := s.s.Read(ctx, index)
seu := new(v2pb.SignedEntryUpdate)
entry := new(v2pb.Entry)
if err != nil {
if grpc.Code(err) == codes.NotFound {
// Return an empty proof.
return &v2pb.EntryProfileAndProof{
IndexSignature: &v2pb.UVF{[]byte(vuf)},
}, nil
}
return nil, err
}

if err := proto.Unmarshal(entryStorage.EntryUpdate, seu); err != nil {
return nil, grpc.Errorf(codes.InvalidArgument, "Cannot unmarshal signed_entry_update")
}
if err := proto.Unmarshal(seu.Entry, entry); err != nil {
return nil, grpc.Errorf(codes.InvalidArgument, "Cannot unmarshal entry")
}

// This key server doesn't employ a merkle tree yet. This is why most of
// fields in EntryProfileAndProof do not exist.
// TODO(cesarghali): integrate merkle tree.
result := &v2pb.EntryProfileAndProof{
Profile: e.Profile,
Entry: entry,
Profile: entryStorage.Profile,
IndexSignature: &v2pb.UVF{[]byte(index)},
}
return result, nil
}
Expand Down
15 changes: 11 additions & 4 deletions keyserver/key_server_test.go
Expand Up @@ -216,10 +216,17 @@ func TestGetNonExistantUser(t *testing.T) {
defer env.Close()

ctx := context.Background() // Unauthenticated request.
_, err := env.Client.GetUser(ctx, &v2pb.GetUserRequest{UserId: "nobody"})
resp, err := env.Client.GetUser(ctx, &v2pb.GetUserRequest{UserId: "nobody"})
if err != nil {
t.Fatalf("Query for nonexistant failed %v", err)
}

if got, want := grpc.Code(err), codes.NotFound; got != want {
t.Errorf("Query for nonexistant user = %v, want: %v", got, want)
// TODO: TEST nonexistant proof.
if resp.GetEntry() != nil {
t.Errorf("Entry returned for nonexistant user")
}
if len(resp.Profile) != 0 {
t.Errorf("Profile returned for nonexistant user")
}
}

Expand All @@ -233,7 +240,7 @@ func TestGetValidUser(t *testing.T) {
res, err := env.Client.GetUser(ctx, &v2pb.GetUserRequest{UserId: primaryUserEmail})

if err != nil {
t.Errorf("GetUser failed: %v", err)
t.Fatalf("GetUser failed: %v", err)
}
// Unmarshaling the resulted profile.
p := new(v2pb.Profile)
Expand Down
3 changes: 2 additions & 1 deletion proto/v2/e2ekeys.proto
Expand Up @@ -101,6 +101,7 @@ message EpochHead {
message UVF {
//TODO: fill with data needed for to verify the Unpredictable Verifiable
//Function.
bytes vrf = 1;
}

message EntryProfileAndProof {
Expand Down Expand Up @@ -129,7 +130,7 @@ message EntryProfileAndProof {
// which are made available to verifiers.
message Step {
oneof type {
// entry_changed contains serialized SignedEntryUpdate.
// entry_changed contains a serialized SignedEntryUpdate.
bytes entry_changed = 1;
SignedEpochHead seh = 2;
}
Expand Down

0 comments on commit d8f77e7

Please sign in to comment.