Add OpenID token request flow to WidgetApi
As per MSC1960.
This commit is contained in:
parent
4b43e39d2a
commit
c19336591e
1 changed files with 39 additions and 0 deletions
|
@ -65,6 +65,13 @@ export interface FromWidgetRequest extends WidgetRequest {
|
||||||
response: any;
|
response: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface OpenIDCredentials {
|
||||||
|
accessToken: string;
|
||||||
|
tokenType: string;
|
||||||
|
matrixServerName: string;
|
||||||
|
expiresIn: number;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles Element <--> Widget interactions for embedded/standalone widgets.
|
* Handles Element <--> Widget interactions for embedded/standalone widgets.
|
||||||
*
|
*
|
||||||
|
@ -78,6 +85,8 @@ export class WidgetApi extends EventEmitter {
|
||||||
private inFlightRequests: { [requestId: string]: (reply: FromWidgetRequest) => void } = {};
|
private inFlightRequests: { [requestId: string]: (reply: FromWidgetRequest) => void } = {};
|
||||||
private readyPromise: Promise<any>;
|
private readyPromise: Promise<any>;
|
||||||
private readyPromiseResolve: () => void;
|
private readyPromiseResolve: () => void;
|
||||||
|
private openIDCredentialsCallback: () => void;
|
||||||
|
public openIDCredentials: OpenIDCredentials;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set this to true if your widget is expecting a ready message from the client. False otherwise (default).
|
* Set this to true if your widget is expecting a ready message from the client. False otherwise (default).
|
||||||
|
@ -121,6 +130,10 @@ export class WidgetApi extends EventEmitter {
|
||||||
// Acknowledge that we're shut down now
|
// Acknowledge that we're shut down now
|
||||||
this.replyToRequest(<ToWidgetRequest>payload, {});
|
this.replyToRequest(<ToWidgetRequest>payload, {});
|
||||||
});
|
});
|
||||||
|
} else if (payload.action === KnownWidgetActions.ReceiveOpenIDCredentials) {
|
||||||
|
// Save OpenID credentials
|
||||||
|
this.setOpenIDCredentials(<ToWidgetRequest>payload);
|
||||||
|
this.replyToRequest(<ToWidgetRequest>payload, {});
|
||||||
} else {
|
} else {
|
||||||
console.warn(`[WidgetAPI] Got unexpected action: ${payload.action}`);
|
console.warn(`[WidgetAPI] Got unexpected action: ${payload.action}`);
|
||||||
}
|
}
|
||||||
|
@ -135,6 +148,32 @@ export class WidgetApi extends EventEmitter {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public setOpenIDCredentials(value: WidgetRequest) {
|
||||||
|
const data = value.data;
|
||||||
|
if (data.state === 'allowed') {
|
||||||
|
this.openIDCredentials = {
|
||||||
|
accessToken: data.access_token,
|
||||||
|
tokenType: data.token_type,
|
||||||
|
matrixServerName: data.matrix_server_name,
|
||||||
|
expiresIn: data.expires_in,
|
||||||
|
}
|
||||||
|
} else if (data.state === 'blocked') {
|
||||||
|
this.openIDCredentials = null;
|
||||||
|
}
|
||||||
|
if (['allowed', 'blocked'].includes(data.state) && this.openIDCredentialsCallback) {
|
||||||
|
this.openIDCredentialsCallback()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public requestOpenIDCredentials(credentialsResponseCallback: () => void) {
|
||||||
|
this.openIDCredentialsCallback = credentialsResponseCallback;
|
||||||
|
this.callAction(
|
||||||
|
KnownWidgetActions.GetOpenIDCredentials,
|
||||||
|
{},
|
||||||
|
this.setOpenIDCredentials,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public waitReady(): Promise<any> {
|
public waitReady(): Promise<any> {
|
||||||
return this.readyPromise;
|
return this.readyPromise;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue