diff --git a/api/permissioning.go b/api/permissioning.go new file mode 100644 index 0000000000000000000000000000000000000000..5c681ce886325aadc514a389979e36b49cfdd2c7 --- /dev/null +++ b/api/permissioning.go @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////////////////////////// +// Copyright © 2020 Privategrity Corporation / +// / +// All rights reserved. / +//////////////////////////////////////////////////////////////////////////////// + +package api + +import ( + "github.com/pkg/errors" + "gitlab.com/elixxir/client/context" + "gitlab.com/elixxir/client/globals" + "gitlab.com/elixxir/client/network/permissioning" + "gitlab.com/elixxir/client/storage" + "gitlab.com/elixxir/comms/client" +) + +// Returns an error if registration fails. +func RegisterWithPermissioning(ctx context.Context, comms client.Comms, registrationCode string) error { + instance := ctx.Manager.GetInstance() + instance.GetPartialNdf() + + //Check the regState is in proper state for registration + regState := ctx.Session.GetRegistrationStatus() + if regState != storage.KeyGenComplete { + return errors.Errorf("Attempting to register before key generation!") + } + + userData := ctx.Session.User() + + // Register with the permissioning server and generate user information + regValidationSignature, err := permissioning.RegisterWithPermissioning(&comms, + userData.GetCryptographicIdentity().GetRSA().GetPublic(), registrationCode) + if err != nil { + globals.Log.INFO.Printf(err.Error()) + return err + } + + // update the session with the registration response + userData.SetRegistrationValidationSignature(regValidationSignature) + + err = ctx.Session.ForwardRegistrationStatus(storage.PermissioningComplete) + if err != nil { + return err + } + + return nil +}