UNPKG

oidc-lib

Version:

A library for creating OIDC Service Providers

139 lines (118 loc) 3.8 kB
module.exports = { activate: activate, selectCamera: selectCamera, stop: stop } var cameraList = {}; var numCameras = 0; var scanner; function activate(){ scanner = new Instascan.Scanner({ video: document.getElementById('preview'), mirror: false }); scanner.addListener('scan', function (content, image) { // showResult(content); processScan(content); pk.util.log_debug(content); }); Instascan.Camera.getCameras() .then(function (cameras) { numCameras = cameras.length; if (numCameras < 1){ return; } var cameraId; var cameraName = window.localStorage.getItem("scanCam"); for (var i=0; i<numCameras; i++){ cameraList[cameras[i].id] = cameras[i]; if (cameraName){ if (cameras[i].name === cameraName){ cameraId = cameras[i].id; } } } if (!cameraId){ for (var i=0; i<numCameras; i++){ var lc = cameras[i].name.toLowerCase(); if (lc.includes('back') || lc.includes('rear')){ cameraId = cameras[i].id; window.localStorage.setItem("scanCam", cameras[i].name); break; } } } if (!cameraId){ cameraId = cameras[0].id; } paintCameras(); if (!cameraId){ cameraId = cameras[0].id; window.localStorage.setItem("scanCam", cameraId); } scanner.start(cameraList[cameraId]); }, function(err){ console.log("Activation error", err); pk.pmanager.managerNotification("You have blocked your wallet's access to your camera", 'alert-warning', true); }); } function showResult(content){ var resEl = document.getElementById("result"); resEl.innerHTML += content + "<br/>"; } function paintCameras(){ if (numCameras > 1){ var html = ""; for (var id in cameraList){ html += '<p class="dropdown-item" onclick="pk.pscan.selectCamera(\'' + id + '\');">' + cameraList[id].name + '</p>'; } document.getElementById("cameraList").innerHTML = html; $('#selectCamera').attr("style", "display:block"); } } function selectCamera(cameraId){ scanner.stop(); scanner.start(cameraList[cameraId]); window.localStorage.setItem("scanCam", cameraList[cameraId].name); } function stop(){ if (scanner){ scanner.stop(); } } async function processScan(content){ var potential_error = 'No response contacting service'; try{ var error_message = 'The bar code is not compatible with this wallet'; var url = content; url = url.replace(/\\/g, ''); pk.util.log_debug("URL:", url); var ourLocation = window.location.href; //.substring(0, window.location.href.lastIndexOf('/')); pk.util.log_debug("ourLocationRoot:", ourLocation); var urlComponents = url.split("?"); var serviceUrl = urlComponents[0]; pk.util.log_debug("serviceUrl:", serviceUrl); var credential_issuer; var paramsString; if (urlComponents.length > 1){ paramsString = urlComponents[1]; var paramComponents = paramsString.split("="); if (paramComponents.length > 1){ if (paramComponents[0] == "req_cred"){ credential_issuer = decodeURIComponent(paramComponents[1]); } } } scanner.stop(); if (credential_issuer){ await pk.pmanager.create_persona_with_credential(credential_issuer); } else{ var location = serviceUrl + "?iss=" + ourLocation + (paramsString ? "&" + paramsString : ""); window.location = location; } } catch (err){ var cameraId = window.localStorage.getItem("scanCam"); scanner.start(cameraList[cameraId]); alert(potential_error + ' ' + err); } }