aboutsummaryrefslogtreecommitdiff
path: root/packages/merchant-backoffice-ui/src/paths/login/index.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/merchant-backoffice-ui/src/paths/login/index.tsx')
-rw-r--r--packages/merchant-backoffice-ui/src/paths/login/index.tsx39
1 files changed, 25 insertions, 14 deletions
diff --git a/packages/merchant-backoffice-ui/src/paths/login/index.tsx b/packages/merchant-backoffice-ui/src/paths/login/index.tsx
index 86ec9a9e6..30b5c37bd 100644
--- a/packages/merchant-backoffice-ui/src/paths/login/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/login/index.tsx
@@ -19,9 +19,7 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import {
- HttpStatusCode
-} from "@gnu-taler/taler-util";
+import { HttpStatusCode } from "@gnu-taler/taler-util";
import {
useMerchantApiContext,
useTranslationContext,
@@ -29,12 +27,10 @@ import {
import { ComponentChildren, Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { NotificationCard } from "../../components/menu/index.js";
-import {
- useSessionContext
-} from "../../context/session.js";
+import { useSessionContext } from "../../context/session.js";
import { Notification } from "../../utils/types.js";
-interface Props { }
+interface Props {}
const tokenRequest = {
scope: "write",
@@ -47,18 +43,30 @@ const tokenRequest = {
export function LoginPage(_p: Props): VNode {
const [token, setToken] = useState("");
const [notif, setNotif] = useState<Notification | undefined>(undefined);
- const { state, logIn } = useSessionContext();
+ const { state, logIn, impersonate } = useSessionContext();
const { lib } = useMerchantApiContext();
const { i18n } = useTranslationContext();
async function doImpersonateImpl(instanceId: string) {
- const result = await lib
- .impersonate(instanceId)
- .createAccessTokenBearer(token, tokenRequest);
+ const newInstanceApi = lib.subInstanceApi(instanceId);
+ const cfg = await newInstanceApi.instance.getConfig();
+ if (cfg.type !== "ok") {
+ setNotif({
+ message: "Could not load the configuration of this instance.",
+ description: newInstanceApi.instance.baseUrl,
+ type: "ERROR",
+ });
+ return;
+ }
+ const result = await newInstanceApi.authenticate.createAccessTokenBearer(
+ token,
+ tokenRequest,
+ );
+
if (result.type === "ok") {
const { token } = result.body;
- logIn({ token });
+ impersonate({ instance: instanceId, baseUrl: new URL(newInstanceApi.instance.baseUrl), token });
return;
} else {
switch (result.case) {
@@ -126,7 +134,8 @@ export function LoginPage(_p: Props): VNode {
>
<p>
<i18n.Translate>
- Need the access token for the instance <b>"{state.instance}"</b>
+ Need the access token for the instance{" "}
+ <b>"{state.instance}"</b>
</i18n.Translate>
</p>
<div class="field is-horizontal">
@@ -190,7 +199,9 @@ export function LoginPage(_p: Props): VNode {
class="modal-card-body"
style={{ border: "1px solid", borderTop: 0, borderBottom: 0 }}
>
- <i18n.Translate>Please enter your access token for <b>"{state.instance}"</b>.</i18n.Translate>
+ <i18n.Translate>
+ Please enter your access token for <b>"{state.instance}"</b>.
+ </i18n.Translate>
<div class="field is-horizontal">
<div class="field-label is-normal">