Skip to content
Snippets Groups Projects
Commit d13cec97 authored by Benjamin Wenger's avatar Benjamin Wenger
Browse files

implemented basic API improvemt for auth callbacks

parent 3ac50c3a
Branches
Tags
2 merge requests!510Release,!252Auth callbacks change
......@@ -26,20 +26,18 @@ import (
type authCallbacks struct {
autoConfirm bool
confCh chan *id.ID
client *xxdk.E2e
}
func makeAuthCallbacks(client *xxdk.E2e, autoConfirm bool) *authCallbacks {
func makeAuthCallbacks(autoConfirm bool) *authCallbacks {
return &authCallbacks{
autoConfirm: autoConfirm,
confCh: make(chan *id.ID, 10),
client: client,
}
}
func (a *authCallbacks) Request(requestor contact.Contact,
receptionID receptionID.EphemeralIdentity,
round rounds.Round) {
round rounds.Round, client *xxdk.E2e) {
msg := fmt.Sprintf("Authentication channel request from: %s\n",
requestor.ID)
jww.INFO.Printf(msg)
......@@ -48,9 +46,9 @@ func (a *authCallbacks) Request(requestor contact.Contact,
jww.INFO.Printf("Channel Request: %s",
requestor.ID)
if viper.GetBool("verify-sends") { // Verify message sends were successful
acceptChannelVerified(a.client, requestor.ID)
acceptChannelVerified(client, requestor.ID)
} else {
acceptChannel(a.client, requestor.ID)
acceptChannel(client, requestor.ID)
}
a.confCh <- requestor.ID
......@@ -60,14 +58,14 @@ func (a *authCallbacks) Request(requestor contact.Contact,
func (a *authCallbacks) Confirm(requestor contact.Contact,
receptionID receptionID.EphemeralIdentity,
round rounds.Round) {
round rounds.Round, client *xxdk.E2e) {
jww.INFO.Printf("Channel Confirmed: %s", requestor.ID)
a.confCh <- requestor.ID
}
func (a *authCallbacks) Reset(requestor contact.Contact,
receptionID receptionID.EphemeralIdentity,
round rounds.Round) {
round rounds.Round, client *xxdk.E2e) {
msg := fmt.Sprintf("Authentication channel reset from: %s\n",
requestor.ID)
jww.INFO.Printf(msg)
......
......@@ -670,7 +670,7 @@ func initClient() *xxdk.E2e {
jww.FATAL.Panicf("%+v", err)
}
authCbs = makeAuthCallbacks(nil,
authCbs = makeAuthCallbacks(
viper.GetBool("unsafe-channel-creation"))
client, err := xxdk.LoginLegacy(baseclient, authCbs)
......@@ -678,8 +678,6 @@ func initClient() *xxdk.E2e {
jww.FATAL.Panicf("%+v", err)
}
authCbs.client = client
if protoUser := viper.GetString("protoUserOut"); protoUser != "" {
jsonBytes, err := client.ConstructProtoUserFile()
......
......@@ -12,10 +12,13 @@ import (
"github.com/pkg/errors"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/auth"
"gitlab.com/elixxir/client/cmix/identity/receptionID"
"gitlab.com/elixxir/client/cmix/rounds"
"gitlab.com/elixxir/client/e2e"
"gitlab.com/elixxir/client/e2e/rekey"
"gitlab.com/elixxir/client/storage/user"
"gitlab.com/elixxir/client/storage/versioned"
"gitlab.com/elixxir/crypto/contact"
"gitlab.com/elixxir/crypto/cyclic"
"gitlab.com/elixxir/crypto/diffieHellman"
"gitlab.com/elixxir/ekv"
......@@ -34,16 +37,25 @@ type E2e struct {
e2eIdentity ReceptionIdentity
}
type AuthCallbacks interface {
Request(partner contact.Contact, receptionID receptionID.EphemeralIdentity,
round rounds.Round, e2e *E2e)
Confirm(partner contact.Contact, receptionID receptionID.EphemeralIdentity,
round rounds.Round, e2e *E2e)
Reset(partner contact.Contact, receptionID receptionID.EphemeralIdentity,
round rounds.Round, e2e *E2e)
}
// Login creates a new E2e backed by the xxdk.Cmix persistent versioned.KV
// It bundles a Cmix object with a ReceptionIdentity object
// and initializes the auth.State and e2e.Handler objects
func Login(client *Cmix, callbacks auth.Callbacks,
func Login(client *Cmix, callbacks AuthCallbacks,
identity ReceptionIdentity) (m *E2e, err error) {
return login(client, callbacks, identity, client.GetStorage().GetKV())
}
// LoginEphemeral creates a new E2e backed by a totally ephemeral versioned.KV
func LoginEphemeral(client *Cmix, callbacks auth.Callbacks,
func LoginEphemeral(client *Cmix, callbacks AuthCallbacks,
identity ReceptionIdentity) (m *E2e, err error) {
return login(client, callbacks, identity, versioned.NewKV(ekv.MakeMemstore()))
}
......@@ -52,7 +64,7 @@ func LoginEphemeral(client *Cmix, callbacks auth.Callbacks,
// Uses the pre-generated transmission ID used by xxdk.Cmix.
// This function is designed to maintain backwards compatibility with previous
// xx messenger designs and should not be used for other purposes.
func LoginLegacy(client *Cmix, callbacks auth.Callbacks) (m *E2e, err error) {
func LoginLegacy(client *Cmix, callbacks AuthCallbacks) (m *E2e, err error) {
m = &E2e{
Cmix: client,
backup: &Container{},
......@@ -70,9 +82,14 @@ func LoginLegacy(client *Cmix, callbacks auth.Callbacks) (m *E2e, err error) {
"the e2e processies")
}
acw := &authCallbacksAdapter{
ac: callbacks,
e2e: m,
}
m.auth, err = auth.NewState(client.GetStorage().GetKV(), client.GetCmix(),
m.e2e, client.GetRng(), client.GetEventReporter(),
auth.GetDefaultParams(), callbacks, m.backup.TriggerBackup)
auth.GetDefaultParams(), acw, m.backup.TriggerBackup)
if err != nil {
return nil, err
}
......@@ -131,7 +148,7 @@ func LoginWithNewBaseNDF_UNSAFE(storageDir string, password []byte,
// JSON containing the cryptographic primitives. This is designed for
// some specific deployment procedures and is generally unsafe.
func LoginWithProtoClient(storageDir string, password []byte,
protoClientJSON []byte, newBaseNdf string,
protoClientJSON []byte, newBaseNdf string, callbacks AuthCallbacks,
params Params) (*E2e, error) {
jww.INFO.Printf("LoginWithProtoClient()")
......@@ -166,18 +183,12 @@ func LoginWithProtoClient(storageDir string, password []byte,
c.network.AddIdentity(c.GetUser().ReceptionID, time.Time{}, true)
// FIXME: The callbacks need to be set, so I suppose we would need to
// either set them via a special type or add them
// to the login call?
if err != nil {
return nil, err
}
err = c.registerFollower()
if err != nil {
return nil, err
}
return Login(c, nil, ReceptionIdentity{
return Login(c, callbacks, ReceptionIdentity{
ID: protoUser.ReceptionID,
RSAPrivatePem: protoUser.ReceptionRSA,
Salt: protoUser.ReceptionSalt,
......@@ -186,7 +197,7 @@ func LoginWithProtoClient(storageDir string, password []byte,
}
// login creates a new xxdk.E2e backed by the given versioned.KV
func login(client *Cmix, callbacks auth.Callbacks,
func login(client *Cmix, callbacks AuthCallbacks,
identity ReceptionIdentity, kv *versioned.KV) (m *E2e, err error) {
// Verify the passed-in ReceptionIdentity matches its properties
......@@ -228,9 +239,14 @@ func login(client *Cmix, callbacks auth.Callbacks,
"the e2e processies")
}
acw := &authCallbacksAdapter{
ac: callbacks,
e2e: m,
}
m.auth, err = auth.NewState(kv, client.GetCmix(),
m.e2e, client.GetRng(), client.GetEventReporter(),
auth.GetDefaultTemporaryParams(), callbacks, m.backup.TriggerBackup)
auth.GetDefaultTemporaryParams(), acw, m.backup.TriggerBackup)
if err != nil {
return nil, err
}
......@@ -396,3 +412,25 @@ func (m *E2e) DeleteContact(partnerId *id.ID) error {
return nil
}
// Adapter type to make the xxdk auth callbacks type compatible with the
// auth.callbacks
type authCallbacksAdapter struct {
ac AuthCallbacks
e2e *E2e
}
func (aca *authCallbacksAdapter) Request(partner contact.Contact,
receptionID receptionID.EphemeralIdentity, round rounds.Round) {
aca.ac.Request(partner, receptionID, round, aca.e2e)
}
func (aca *authCallbacksAdapter) Confirm(partner contact.Contact,
receptionID receptionID.EphemeralIdentity, round rounds.Round) {
aca.ac.Confirm(partner, receptionID, round, aca.e2e)
}
func (aca *authCallbacksAdapter) Reset(partner contact.Contact,
receptionID receptionID.EphemeralIdentity, round rounds.Round) {
aca.ac.Reset(partner, receptionID, round, aca.e2e)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment