Skip to content

Commit

Permalink
fix(auth): using private key in browser to login.
Browse files Browse the repository at this point in the history
  • Loading branch information
dawidgil committed Oct 4, 2021
1 parent 30c74f4 commit cdb3d20
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 17 deletions.
4 changes: 2 additions & 2 deletions docs/api/classes/GnosisIam.GnosisIam-1.md
Original file line number Diff line number Diff line change
Expand Up @@ -1041,13 +1041,13 @@ ___

### getProviderType

**getProviderType**(): `undefined` \| [`WalletProvider`](../enums/types_WalletProvider.WalletProvider.md)
**getProviderType**(): [`WalletProvider`](../enums/types_WalletProvider.WalletProvider.md)

Get the current initialized provider type

#### Returns

`undefined` \| [`WalletProvider`](../enums/types_WalletProvider.WalletProvider.md)
[`WalletProvider`](../enums/types_WalletProvider.WalletProvider.md)

provider type if the session is active if not undefined

Expand Down
4 changes: 2 additions & 2 deletions docs/api/classes/iam.IAM.md
Original file line number Diff line number Diff line change
Expand Up @@ -893,13 +893,13 @@ ___

### getProviderType

**getProviderType**(): `undefined` \| [`WalletProvider`](../enums/types_WalletProvider.WalletProvider.md)
**getProviderType**(): [`WalletProvider`](../enums/types_WalletProvider.WalletProvider.md)

Get the current initialized provider type

#### Returns

`undefined` \| [`WalletProvider`](../enums/types_WalletProvider.WalletProvider.md)
[`WalletProvider`](../enums/types_WalletProvider.WalletProvider.md)

provider type if the session is active if not undefined

Expand Down
7 changes: 7 additions & 0 deletions docs/api/enums/types_WalletProvider.WalletProvider.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

- [EwKeyManager](types_WalletProvider.WalletProvider.md#ewkeymanager)
- [MetaMask](types_WalletProvider.WalletProvider.md#metamask)
- [PrivateKey](types_WalletProvider.WalletProvider.md#privatekey)
- [WalletConnect](types_WalletProvider.WalletProvider.md#walletconnect)

## Enumeration members
Expand All @@ -24,6 +25,12 @@ ___

___

### PrivateKey

**PrivateKey** = `"PrivateKey"`

___

### WalletConnect

**WalletConnect** = `"WalletConnect"`
39 changes: 28 additions & 11 deletions src/iam/iam-base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ export class IAMBase {
protected _didSigner: EwSigner | undefined;
protected _identityToken: string | undefined;
protected _transactionOverrides: utils.Deferrable<providers.TransactionRequest> = {};
protected _providerType: WalletProvider | undefined;
protected _providerType: WalletProvider;
protected _publicKey: string | undefined | null;

protected _registrySetting: RegistrySettings;
Expand Down Expand Up @@ -144,6 +144,10 @@ export class IAMBase {
this._publicKey = localStorage.getItem(PUBLIC_KEY);
}

if (this._executionEnvironment === ExecutionEnvironment.NODE) {
this._providerType = WalletProvider.PrivateKey;
}

this._walletConnectService = new WalletConnectService(bridgeUrl, infuraId, ewKeyManagerUrl);
}

Expand Down Expand Up @@ -180,15 +184,10 @@ export class IAMBase {
walletProvider?: WalletProvider;
}): Promise<AccountInfo | undefined> {
const { privateKey, rpcUrl } = this._connectionOptions;
if (this._executionEnvironment === ExecutionEnvironment.NODE) {
if (!privateKey) {
throw new Error(ERROR_MESSAGES.PRIVATE_KEY_NOT_PROVIDED);
}
if (!rpcUrl) {
throw new Error(ERROR_MESSAGES.RPC_URL_NOT_PROVIDED);
}
this._provider = new JsonRpcProvider({ url: rpcUrl });
this._signer = new Wallet(privateKey, this._provider);

if (walletProvider === WalletProvider.PrivateKey) {
this.initWithPrivateKey(privateKey, rpcUrl);
this._providerType = walletProvider;
return;
}

Expand Down Expand Up @@ -248,6 +247,17 @@ export class IAMBase {
throw new Error(ERROR_MESSAGES.WALLET_TYPE_NOT_PROVIDED);
}

private initWithPrivateKey(privateKey, rpcUrl) {
if (!privateKey) {
throw new Error(ERROR_MESSAGES.PRIVATE_KEY_NOT_PROVIDED);
}
if (!rpcUrl) {
throw new Error(ERROR_MESSAGES.RPC_URL_NOT_PROVIDED);
}
this._provider = new JsonRpcProvider({ url: rpcUrl });
this._signer = new Wallet(privateKey, this._provider);
}

/**
* @description Establishes connection to the cache serverand sets public key and identity token
*/
Expand Down Expand Up @@ -320,7 +330,14 @@ export class IAMBase {
* @requires to be called after the connection to wallet was initialized
*/
on(event: "accountChanged" | "networkChanged" | "disconnected", eventHandler: () => void) {
if (!this._providerType) return;
const providersThatHandleEvents = [
WalletProvider.WalletConnect,
WalletProvider.EwKeyManager,
WalletProvider.MetaMask,
];
if (!providersThatHandleEvents.includes(this._providerType)) {
return;
}
const isMetamask = this._providerType === WalletProvider.MetaMask;
switch (event) {
case "accountChanged": {
Expand Down
1 change: 1 addition & 0 deletions src/types/WalletProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ export enum WalletProvider {
WalletConnect = "WalletConnect",
MetaMask = "MetaMask",
EwKeyManager = "EwKeyManager",
PrivateKey = "PrivateKey",
}
4 changes: 2 additions & 2 deletions test/initializeConnection.testSuite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import { WalletProvider } from "../src/types/WalletProvider";
const iam_withoutKey = new IAM({ rpcUrl });

export const initializeConnectionTests = () => {
test("initializeConnection requires privateKey or walletProvider enum", async () => {
await expect(iam_withoutKey.initializeConnection()).rejects.toThrow(ERROR_MESSAGES.WALLET_TYPE_NOT_PROVIDED);
test("initializeConnection requires privateKey", async () => {
await expect(iam_withoutKey.initializeConnection()).rejects.toThrow(ERROR_MESSAGES.PRIVATE_KEY_NOT_PROVIDED);
});

test("initializeConnection requires walletProvider to be known value", async () => {
Expand Down

0 comments on commit cdb3d20

Please sign in to comment.