package client import ( "fmt" "hash" "github.com/pkg/errors" "github.com/dexidp/dex/storage" "github.com/dexidp/dex/storage/ent/db" ) func rollback(tx *db.Tx, t string, err error) error { rerr := tx.Rollback() err = convertDBError(t, err) if rerr == nil { return err } return errors.Wrapf(err, "rolling back transaction: %v", rerr) } func convertDBError(t string, err error) error { if db.IsNotFound(err) { return storage.ErrNotFound } if db.IsConstraintError(err) { return storage.ErrAlreadyExists } return fmt.Errorf(t, err) } // compose hashed id from user and connection id to use it as primary key // ent doesn't support multi-key primary yet // https://github.com/facebook/ent/issues/400 func offlineSessionID(userID string, connID string, hasher func() hash.Hash) string { h := hasher() h.Write([]byte(userID)) h.Write([]byte(connID)) return fmt.Sprintf("%x", h.Sum(nil)) }