144 lines
5.8 KiB
Plaintext
144 lines
5.8 KiB
Plaintext
@using FormBuilder.Components.Workflow
|
|
@using FormBuilder
|
|
@using FormBuilder.Helpers
|
|
@using Microsoft.AspNetCore.Http
|
|
@using Microsoft.Extensions.Options;
|
|
@using SimpleIdServer.IdServer.Options;
|
|
@using System.Text.Json
|
|
@model SimpleIdServer.IdServer.UI.ViewModels.SidWorkflowViewModel
|
|
@inject IOptions<FormBuilderOptions> options
|
|
@inject IUriProvider uriProvider
|
|
@inject IHttpContextAccessor HttpContextAccessor;
|
|
|
|
@{
|
|
Layout = "~/Views/Shared/_FormBuilderLayout.cshtml";
|
|
var antiforgeryToken = HttpContextAccessor.HttpContext.Request.Cookies[options.Value.AntiforgeryCookieName];
|
|
Model.AntiforgeryToken.CookieValue = antiforgeryToken;
|
|
var step = Model.Workflow?.Steps?.SingleOrDefault(s => s.Id == Model.CurrentStepId);
|
|
var beginRegisterUrl = Model.Input["BeginRegisterUrl"].ToString();
|
|
var registerStatusUrl = Model.Input["RegisterStatusUrl"].ToString();
|
|
}
|
|
|
|
<component type="typeof(WorkflowViewer)"
|
|
render-mode="ServerPrerendered"
|
|
param-Input="@Model.Input"
|
|
param-Workflow="@Model.Workflow"
|
|
param-FormRecords="@Model.FormRecords"
|
|
param-CurrentStepId="@Model.CurrentStepId"
|
|
param-ErrorMessages="@Model.ErrorMessages"
|
|
param-SuccessMessages="@Model.SuccessMessages"
|
|
param-AntiforgeryToken="@Model.AntiforgeryToken"
|
|
param-SupportedLanguageCodes="@Model.SupportedLanguageCodes"
|
|
param-Template="@Model.Template" />
|
|
|
|
@section Header {
|
|
@foreach (var cssStyle in Model.Template.CssStyles)
|
|
{
|
|
<link rel="stylesheet" href="@uriProvider.GetCssUrl(Model.Template.Id, cssStyle)" />
|
|
}
|
|
|
|
@foreach (var jsStyle in Model.Template.JsStyles)
|
|
{
|
|
<script src="@uriProvider.GetJsUrl(Model.Template.Id, jsStyle)" type="text/javascript"></script>
|
|
}
|
|
}
|
|
|
|
@section Scripts {
|
|
<script type="text/javascript">
|
|
let csharpReference;
|
|
|
|
var init = function() {
|
|
var beginRegisterUrl = "@beginRegisterUrl";
|
|
var registerStatusUrl = "@registerStatusUrl";
|
|
var isCreated = "IsCreated";
|
|
var isInitialized = false;
|
|
|
|
var displayError = function(errorJson) {
|
|
csharpReference.invokeMethodAsync("SetErrorMessage", errorJson["error_description"]);
|
|
}
|
|
|
|
var displaySuccessMessage = function () {
|
|
csharpReference.invokeMethodAsync("SetSuccessMessage", "User is created");
|
|
csharpReference.invokeMethodAsync("ClearErrorMessages");
|
|
csharpReference.invokeMethodAsync("SetInputData", isCreated, "true");
|
|
$("#generateQrCodeForm").attr("style", "display: none !important");
|
|
$("#qrCodeContainer").attr("style", "display: none !important");
|
|
}
|
|
|
|
var displayQRCode = function (img, qrCode) {
|
|
$("#generateQrCodeForm").attr("style", "display: none !important");
|
|
$("#qrCodeContainer").css("display", "");
|
|
$("#qrCodeContainer img").attr("src", img);
|
|
}
|
|
|
|
async function checkStatus(sessionId, nextRegistrationRedirectUrl) {
|
|
setTimeout(async function(){
|
|
let response = await fetch(registerStatusUrl + "/" + sessionId, {
|
|
method: 'GET'
|
|
});
|
|
if (!response.ok) {
|
|
let responseJson = await response.json();
|
|
displayError(responseJson);
|
|
await checkStatus(sessionId, nextRegistrationRedirectUrl);
|
|
return;
|
|
}
|
|
|
|
if(nextRegistrationRedirectUrl) {
|
|
window.location.href = nextRegistrationRedirectUrl;
|
|
} else {
|
|
displaySuccessMessage();
|
|
}
|
|
}, 1000);
|
|
}
|
|
|
|
async function makeCredential(login, displayName, form) {
|
|
let response = await fetch(beginRegisterUrl, {
|
|
method: 'POST',
|
|
body: JSON.stringify({ login: login, display_name: displayName, credential_type: 'mobile' }),
|
|
headers: {
|
|
"Accept": "application/json",
|
|
"Content-Type": "application/json"
|
|
}
|
|
});
|
|
|
|
if (!response.ok) {
|
|
let responseJson = await response.json();
|
|
displayError(responseJson);
|
|
return;
|
|
}
|
|
|
|
const sessionId = response.headers.get('SessionId');
|
|
const qrCode = response.headers.get('QRCode');
|
|
let nextRegistrationRedirectUrl = response.headers.get('NextRegistrationRedirectUrl');
|
|
const blob = await response.blob();
|
|
const img = URL.createObjectURL(blob);
|
|
displayQRCode(img, qrCode);
|
|
await checkStatus(sessionId, nextRegistrationRedirectUrl);
|
|
};
|
|
|
|
var tryListenForm = function () {
|
|
const elt = $("#generateQrCodeForm");
|
|
if (isInitialized === true) return;
|
|
if (elt.length === 0) {
|
|
setTimeout(() => tryListenForm(), 500);
|
|
return;
|
|
}
|
|
|
|
isInitialized = true;
|
|
elt.submit(function (e) {
|
|
e.preventDefault();
|
|
var login = $("#generateQrCodeForm input[name='Login']").val();
|
|
var displayName = $("#generateQrCodeForm input[name='DisplayName']").val();
|
|
makeCredential(login, displayName, convertFormToJSON($(e.target)));
|
|
});
|
|
}
|
|
|
|
tryListenForm();
|
|
};
|
|
|
|
setCsharpReference = function (ref) {
|
|
csharpReference = ref;
|
|
init();
|
|
};
|
|
</script>
|
|
} |