oidc-lib
Version:
A library for creating OIDC Service Providers
139 lines (118 loc) • 3.8 kB
JavaScript
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);
}
}