github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/protocol/keybase1/rekey.go (about) 1 // Auto-generated to Go types and interfaces using avdl-compiler v1.4.10 (https://github.com/keybase/node-avdl-compiler) 2 // Input file: avdl/keybase1/rekey.avdl 3 4 package keybase1 5 6 import ( 7 "fmt" 8 "github.com/keybase/go-framed-msgpack-rpc/rpc" 9 context "golang.org/x/net/context" 10 "time" 11 ) 12 13 type TLF struct { 14 Id TLFID `codec:"id" json:"id"` 15 Name string `codec:"name" json:"name"` 16 Writers []string `codec:"writers" json:"writers"` 17 Readers []string `codec:"readers" json:"readers"` 18 IsPrivate bool `codec:"isPrivate" json:"isPrivate"` 19 } 20 21 func (o TLF) DeepCopy() TLF { 22 return TLF{ 23 Id: o.Id.DeepCopy(), 24 Name: o.Name, 25 Writers: (func(x []string) []string { 26 if x == nil { 27 return nil 28 } 29 ret := make([]string, len(x)) 30 for i, v := range x { 31 vCopy := v 32 ret[i] = vCopy 33 } 34 return ret 35 })(o.Writers), 36 Readers: (func(x []string) []string { 37 if x == nil { 38 return nil 39 } 40 ret := make([]string, len(x)) 41 for i, v := range x { 42 vCopy := v 43 ret[i] = vCopy 44 } 45 return ret 46 })(o.Readers), 47 IsPrivate: o.IsPrivate, 48 } 49 } 50 51 type ProblemTLF struct { 52 Tlf TLF `codec:"tlf" json:"tlf"` 53 Score int `codec:"score" json:"score"` 54 Solution_kids []KID `codec:"solution_kids" json:"solution_kids"` 55 } 56 57 func (o ProblemTLF) DeepCopy() ProblemTLF { 58 return ProblemTLF{ 59 Tlf: o.Tlf.DeepCopy(), 60 Score: o.Score, 61 Solution_kids: (func(x []KID) []KID { 62 if x == nil { 63 return nil 64 } 65 ret := make([]KID, len(x)) 66 for i, v := range x { 67 vCopy := v.DeepCopy() 68 ret[i] = vCopy 69 } 70 return ret 71 })(o.Solution_kids), 72 } 73 } 74 75 // ProblemSet is for a particular (user,kid) that initiated a rekey problem. 76 // This problem consists of one or more problem TLFs, which are individually scored 77 // and have attendant solutions --- devices that if they came online can rekey and 78 // solve the ProblemTLF. 79 type ProblemSet struct { 80 User User `codec:"user" json:"user"` 81 Kid KID `codec:"kid" json:"kid"` 82 Tlfs []ProblemTLF `codec:"tlfs" json:"tlfs"` 83 } 84 85 func (o ProblemSet) DeepCopy() ProblemSet { 86 return ProblemSet{ 87 User: o.User.DeepCopy(), 88 Kid: o.Kid.DeepCopy(), 89 Tlfs: (func(x []ProblemTLF) []ProblemTLF { 90 if x == nil { 91 return nil 92 } 93 ret := make([]ProblemTLF, len(x)) 94 for i, v := range x { 95 vCopy := v.DeepCopy() 96 ret[i] = vCopy 97 } 98 return ret 99 })(o.Tlfs), 100 } 101 } 102 103 type ProblemSetDevices struct { 104 ProblemSet ProblemSet `codec:"problemSet" json:"problemSet"` 105 Devices []Device `codec:"devices" json:"devices"` 106 } 107 108 func (o ProblemSetDevices) DeepCopy() ProblemSetDevices { 109 return ProblemSetDevices{ 110 ProblemSet: o.ProblemSet.DeepCopy(), 111 Devices: (func(x []Device) []Device { 112 if x == nil { 113 return nil 114 } 115 ret := make([]Device, len(x)) 116 for i, v := range x { 117 vCopy := v.DeepCopy() 118 ret[i] = vCopy 119 } 120 return ret 121 })(o.Devices), 122 } 123 } 124 125 type Outcome int 126 127 const ( 128 Outcome_NONE Outcome = 0 129 Outcome_FIXED Outcome = 1 130 Outcome_IGNORED Outcome = 2 131 ) 132 133 func (o Outcome) DeepCopy() Outcome { return o } 134 135 var OutcomeMap = map[string]Outcome{ 136 "NONE": 0, 137 "FIXED": 1, 138 "IGNORED": 2, 139 } 140 141 var OutcomeRevMap = map[Outcome]string{ 142 0: "NONE", 143 1: "FIXED", 144 2: "IGNORED", 145 } 146 147 func (e Outcome) String() string { 148 if v, ok := OutcomeRevMap[e]; ok { 149 return v 150 } 151 return fmt.Sprintf("%v", int(e)) 152 } 153 154 type RevokeWarning struct { 155 EndangeredTLFs []TLF `codec:"endangeredTLFs" json:"endangeredTLFs"` 156 } 157 158 func (o RevokeWarning) DeepCopy() RevokeWarning { 159 return RevokeWarning{ 160 EndangeredTLFs: (func(x []TLF) []TLF { 161 if x == nil { 162 return nil 163 } 164 ret := make([]TLF, len(x)) 165 for i, v := range x { 166 vCopy := v.DeepCopy() 167 ret[i] = vCopy 168 } 169 return ret 170 })(o.EndangeredTLFs), 171 } 172 } 173 174 type ShowPendingRekeyStatusArg struct { 175 SessionID int `codec:"sessionID" json:"sessionID"` 176 } 177 178 type GetPendingRekeyStatusArg struct { 179 SessionID int `codec:"sessionID" json:"sessionID"` 180 } 181 182 type DebugShowRekeyStatusArg struct { 183 SessionID int `codec:"sessionID" json:"sessionID"` 184 } 185 186 type RekeyStatusFinishArg struct { 187 SessionID int `codec:"sessionID" json:"sessionID"` 188 } 189 190 type RekeySyncArg struct { 191 SessionID int `codec:"sessionID" json:"sessionID"` 192 Force bool `codec:"force" json:"force"` 193 } 194 195 type GetRevokeWarningArg struct { 196 SessionID int `codec:"sessionID" json:"sessionID"` 197 ActingDevice DeviceID `codec:"actingDevice" json:"actingDevice"` 198 TargetDevice DeviceID `codec:"targetDevice" json:"targetDevice"` 199 } 200 201 type RekeyInterface interface { 202 // ShowPendingRekeyStatus shows either pending gregor-initiated rekey harassments 203 // or nothing if none were pending. 204 ShowPendingRekeyStatus(context.Context, int) error 205 // GetPendingRekeyStatus returns the pending ProblemSetDevices. 206 GetPendingRekeyStatus(context.Context, int) (ProblemSetDevices, error) 207 // DebugShowRekeyStatus is used by the CLI to kick off a "ShowRekeyStatus" window for 208 // the current user. 209 DebugShowRekeyStatus(context.Context, int) error 210 // RekeyStatusFinish is called when work is completed on a given RekeyStatus window. The Outcome 211 // can be Fixed or Ignored. 212 RekeyStatusFinish(context.Context, int) (Outcome, error) 213 // RekeySync flushes the current rekey loop and gets to a good stopping point 214 // to assert state. Good for race-free testing, not very useful in production. 215 // Force overrides a long-snooze. 216 RekeySync(context.Context, RekeySyncArg) error 217 // GetRevokeWarning computes the TLFs that will be endangered if actingDevice 218 // revokes targetDevice. 219 GetRevokeWarning(context.Context, GetRevokeWarningArg) (RevokeWarning, error) 220 } 221 222 func RekeyProtocol(i RekeyInterface) rpc.Protocol { 223 return rpc.Protocol{ 224 Name: "keybase.1.rekey", 225 Methods: map[string]rpc.ServeHandlerDescription{ 226 "showPendingRekeyStatus": { 227 MakeArg: func() interface{} { 228 var ret [1]ShowPendingRekeyStatusArg 229 return &ret 230 }, 231 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 232 typedArgs, ok := args.(*[1]ShowPendingRekeyStatusArg) 233 if !ok { 234 err = rpc.NewTypeError((*[1]ShowPendingRekeyStatusArg)(nil), args) 235 return 236 } 237 err = i.ShowPendingRekeyStatus(ctx, typedArgs[0].SessionID) 238 return 239 }, 240 }, 241 "getPendingRekeyStatus": { 242 MakeArg: func() interface{} { 243 var ret [1]GetPendingRekeyStatusArg 244 return &ret 245 }, 246 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 247 typedArgs, ok := args.(*[1]GetPendingRekeyStatusArg) 248 if !ok { 249 err = rpc.NewTypeError((*[1]GetPendingRekeyStatusArg)(nil), args) 250 return 251 } 252 ret, err = i.GetPendingRekeyStatus(ctx, typedArgs[0].SessionID) 253 return 254 }, 255 }, 256 "debugShowRekeyStatus": { 257 MakeArg: func() interface{} { 258 var ret [1]DebugShowRekeyStatusArg 259 return &ret 260 }, 261 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 262 typedArgs, ok := args.(*[1]DebugShowRekeyStatusArg) 263 if !ok { 264 err = rpc.NewTypeError((*[1]DebugShowRekeyStatusArg)(nil), args) 265 return 266 } 267 err = i.DebugShowRekeyStatus(ctx, typedArgs[0].SessionID) 268 return 269 }, 270 }, 271 "rekeyStatusFinish": { 272 MakeArg: func() interface{} { 273 var ret [1]RekeyStatusFinishArg 274 return &ret 275 }, 276 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 277 typedArgs, ok := args.(*[1]RekeyStatusFinishArg) 278 if !ok { 279 err = rpc.NewTypeError((*[1]RekeyStatusFinishArg)(nil), args) 280 return 281 } 282 ret, err = i.RekeyStatusFinish(ctx, typedArgs[0].SessionID) 283 return 284 }, 285 }, 286 "rekeySync": { 287 MakeArg: func() interface{} { 288 var ret [1]RekeySyncArg 289 return &ret 290 }, 291 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 292 typedArgs, ok := args.(*[1]RekeySyncArg) 293 if !ok { 294 err = rpc.NewTypeError((*[1]RekeySyncArg)(nil), args) 295 return 296 } 297 err = i.RekeySync(ctx, typedArgs[0]) 298 return 299 }, 300 }, 301 "getRevokeWarning": { 302 MakeArg: func() interface{} { 303 var ret [1]GetRevokeWarningArg 304 return &ret 305 }, 306 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 307 typedArgs, ok := args.(*[1]GetRevokeWarningArg) 308 if !ok { 309 err = rpc.NewTypeError((*[1]GetRevokeWarningArg)(nil), args) 310 return 311 } 312 ret, err = i.GetRevokeWarning(ctx, typedArgs[0]) 313 return 314 }, 315 }, 316 }, 317 } 318 } 319 320 type RekeyClient struct { 321 Cli rpc.GenericClient 322 } 323 324 // ShowPendingRekeyStatus shows either pending gregor-initiated rekey harassments 325 // or nothing if none were pending. 326 func (c RekeyClient) ShowPendingRekeyStatus(ctx context.Context, sessionID int) (err error) { 327 __arg := ShowPendingRekeyStatusArg{SessionID: sessionID} 328 err = c.Cli.Call(ctx, "keybase.1.rekey.showPendingRekeyStatus", []interface{}{__arg}, nil, 0*time.Millisecond) 329 return 330 } 331 332 // GetPendingRekeyStatus returns the pending ProblemSetDevices. 333 func (c RekeyClient) GetPendingRekeyStatus(ctx context.Context, sessionID int) (res ProblemSetDevices, err error) { 334 __arg := GetPendingRekeyStatusArg{SessionID: sessionID} 335 err = c.Cli.Call(ctx, "keybase.1.rekey.getPendingRekeyStatus", []interface{}{__arg}, &res, 0*time.Millisecond) 336 return 337 } 338 339 // DebugShowRekeyStatus is used by the CLI to kick off a "ShowRekeyStatus" window for 340 // the current user. 341 func (c RekeyClient) DebugShowRekeyStatus(ctx context.Context, sessionID int) (err error) { 342 __arg := DebugShowRekeyStatusArg{SessionID: sessionID} 343 err = c.Cli.Call(ctx, "keybase.1.rekey.debugShowRekeyStatus", []interface{}{__arg}, nil, 0*time.Millisecond) 344 return 345 } 346 347 // RekeyStatusFinish is called when work is completed on a given RekeyStatus window. The Outcome 348 // can be Fixed or Ignored. 349 func (c RekeyClient) RekeyStatusFinish(ctx context.Context, sessionID int) (res Outcome, err error) { 350 __arg := RekeyStatusFinishArg{SessionID: sessionID} 351 err = c.Cli.Call(ctx, "keybase.1.rekey.rekeyStatusFinish", []interface{}{__arg}, &res, 0*time.Millisecond) 352 return 353 } 354 355 // RekeySync flushes the current rekey loop and gets to a good stopping point 356 // to assert state. Good for race-free testing, not very useful in production. 357 // Force overrides a long-snooze. 358 func (c RekeyClient) RekeySync(ctx context.Context, __arg RekeySyncArg) (err error) { 359 err = c.Cli.Call(ctx, "keybase.1.rekey.rekeySync", []interface{}{__arg}, nil, 0*time.Millisecond) 360 return 361 } 362 363 // GetRevokeWarning computes the TLFs that will be endangered if actingDevice 364 // revokes targetDevice. 365 func (c RekeyClient) GetRevokeWarning(ctx context.Context, __arg GetRevokeWarningArg) (res RevokeWarning, err error) { 366 err = c.Cli.Call(ctx, "keybase.1.rekey.getRevokeWarning", []interface{}{__arg}, &res, 0*time.Millisecond) 367 return 368 }