Skip to content

Commit

Permalink
poc oauth v2
Browse files Browse the repository at this point in the history
  • Loading branch information
patjacobs-magic committed Dec 15, 2023
1 parent f415ba6 commit 62d0d14
Showing 1 changed file with 66 additions and 0 deletions.
66 changes: 66 additions & 0 deletions packages/@magic-ext/oauth/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,34 @@ export class OAuthExtension extends Extension.Internal<'oauth'> {
});
}

public loginWithRedirectV2(configuration: OAuthRedirectConfiguration) {
return this.utils.createPromiEvent<void>(async (resolve) => {
console.log('loginWithRedirectV2', configuration);

const parseRedirectResult = this.utils.createJsonRpcRequestPayload('magic_oauth_login_with_redirect_start', [
{
...configuration,
apiKey: this.sdk.apiKey,
platform: 'web',
},
]);

console.log('loginWithRedirectV2: rpc payload', parseRedirectResult);

const result = await this.request<any>(parseRedirectResult);

console.log('loginWithRedirectV2: rpc result', result);

// TODO: handle error like allowlist not matching

if (result?.oauthAuthoriationURI) {
window.location.href = result.oauthAuthoriationURI;
}

resolve();
});
}

public getRedirectResult() {
const queryString = window.location.search;

Expand All @@ -41,6 +69,20 @@ export class OAuthExtension extends Extension.Internal<'oauth'> {

return getResult.call(this, queryString);
}

public getRedirectResultV2() {
console.log('getRedirectResultV2');
const queryString = window.location.search;

console.log('getRedirectResultV2', queryString);

// Remove the query from the redirect callback as a precaution to prevent
// malicious parties from parsing it before we have a chance to use it.
const urlWithoutQuery = window.location.origin + window.location.pathname;
window.history.replaceState(null, '', urlWithoutQuery);

return getResultV2.call(this, queryString);
}
}

const OAUTH_REDIRECT_METADATA_KEY = 'oauth_redirect_metadata';
Expand Down Expand Up @@ -119,4 +161,28 @@ function getResult(this: OAuthExtension, queryString: string) {
});
}

function getResultV2(this: OAuthExtension, queryString: string) {
return this.utils.createPromiEvent<OAuthRedirectResult>(async (resolve, reject) => {
const parseRedirectResult = this.utils.createJsonRpcRequestPayload('magic_oauth_parse_redirect_verify', [
queryString,
]);

// Parse the result, which may contain an OAuth-formatted error.
const resultOrError = await this.request<OAuthRedirectResult | OAuthRedirectError>(parseRedirectResult);
const maybeResult = resultOrError as OAuthRedirectResult;
const maybeError = resultOrError as OAuthRedirectError;

if (maybeError.error) {
reject(
this.createError<OAuthErrorData>(maybeError.error, maybeError.error_description ?? 'An error occurred.', {
errorURI: maybeError.error_uri,
provider: maybeError.provider,
}),
);
}

resolve(maybeResult);
});
}

export * from './types';

0 comments on commit 62d0d14

Please sign in to comment.