forked from keybase/client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
prove.go
93 lines (83 loc) · 3.05 KB
/
prove.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// Copyright 2015 Keybase, Inc. All rights reserved. Use of
// this source code is governed by the included BSD license.
package service
import (
"github.com/keybase/client/go/engine"
"github.com/keybase/client/go/libkb"
keybase1 "github.com/keybase/client/go/protocol"
rpc "github.com/keybase/go-framed-msgpack-rpc"
"golang.org/x/net/context"
)
// ProveHandler is the service side of proving ownership of social media accounts
// like Twitter and Github.
type ProveHandler struct {
*BaseHandler
libkb.Contextified
}
type proveUI struct {
sessionID int
cli keybase1.ProveUiClient
}
// NewProveHandler makes a new ProveHandler object from an RPC transport.
func NewProveHandler(xp rpc.Transporter, g *libkb.GlobalContext) *ProveHandler {
return &ProveHandler{
BaseHandler: NewBaseHandler(xp),
Contextified: libkb.NewContextified(g),
}
}
func (p *proveUI) PromptOverwrite(ctx context.Context, arg keybase1.PromptOverwriteArg) (b bool, err error) {
arg.SessionID = p.sessionID
return p.cli.PromptOverwrite(ctx, arg)
}
func (p *proveUI) PromptUsername(ctx context.Context, arg keybase1.PromptUsernameArg) (un string, err error) {
arg.SessionID = p.sessionID
return p.cli.PromptUsername(ctx, arg)
}
func (p *proveUI) OutputPrechecks(ctx context.Context, arg keybase1.OutputPrechecksArg) error {
arg.SessionID = p.sessionID
return p.cli.OutputPrechecks(ctx, arg)
}
func (p *proveUI) PreProofWarning(ctx context.Context, arg keybase1.PreProofWarningArg) (ok bool, err error) {
arg.SessionID = p.sessionID
return p.cli.PreProofWarning(ctx, arg)
}
func (p *proveUI) OutputInstructions(ctx context.Context, arg keybase1.OutputInstructionsArg) (err error) {
arg.SessionID = p.sessionID
return p.cli.OutputInstructions(ctx, arg)
}
func (p *proveUI) OkToCheck(ctx context.Context, arg keybase1.OkToCheckArg) (bool, error) {
arg.SessionID = p.sessionID
return p.cli.OkToCheck(ctx, arg)
}
func (p *proveUI) DisplayRecheckWarning(ctx context.Context, arg keybase1.DisplayRecheckWarningArg) error {
arg.SessionID = p.sessionID
return p.cli.DisplayRecheckWarning(ctx, arg)
}
func (ph *ProveHandler) getProveUI(sessionID int) libkb.ProveUI {
return &proveUI{sessionID, keybase1.ProveUiClient{Cli: ph.rpcClient()}}
}
// Prove handles the `keybase.1.startProof` RPC.
func (ph *ProveHandler) StartProof(_ context.Context, arg keybase1.StartProofArg) (res keybase1.StartProofResult, err error) {
eng := engine.NewProve(&arg, ph.G())
ctx := engine.Context{
ProveUI: ph.getProveUI(arg.SessionID),
SecretUI: ph.getSecretUI(arg.SessionID),
LogUI: ph.getLogUI(arg.SessionID),
}
err = engine.RunEngine(eng, &ctx)
if err != nil {
return res, err
}
res.SigID = eng.SigID()
return res, err
}
func (ph *ProveHandler) CheckProof(_ context.Context, arg keybase1.CheckProofArg) (res keybase1.CheckProofStatus, err error) {
eng := engine.NewProveCheck(ph.G(), arg.SigID)
ctx := &engine.Context{}
if err = engine.RunEngine(eng, ctx); err != nil {
return
}
found, status, text := eng.Results()
res = keybase1.CheckProofStatus{Found: found, Status: status, ProofText: text}
return
}