[Libreoffice-commits] online.git: 2 commits - loleaflet/html loleaflet/src

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Thu Nov 29 20:47:41 UTC 2018


 loleaflet/html/signing-identities.html |   20 +++
 loleaflet/src/control/Signing.js       |  186 ++++++++++++++++++++++++++++++---
 2 files changed, 194 insertions(+), 12 deletions(-)

New commits:
commit 91218de5b03b45448f6e8cb0ea2c7cabb7fb9c2e
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Thu Nov 22 14:41:43 2018 +0100
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Thu Nov 29 21:47:31 2018 +0100

    extract vereign server URL
    
    Change-Id: I11fb8b26a1919550817f07502bb3dca0541487be
    Reviewed-on: https://gerrit.libreoffice.org/63838
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    Tested-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/loleaflet/src/control/Signing.js b/loleaflet/src/control/Signing.js
index aa0550065..af890a434 100644
--- a/loleaflet/src/control/Signing.js
+++ b/loleaflet/src/control/Signing.js
@@ -9,6 +9,8 @@ var library = null;
 var identity = null;
 var currentPassport = null;
 
+var vereignURL = 'https://integration2.vereign.com';
+
 function isSuccess(result) {
 	return result.code == '200';
 }
@@ -325,9 +327,8 @@ L.Map.include({
 					}
 				}
 			},
-			'https://integration2.vereign.com/api/js/iframe'
-		).then(function(lib)
-		{
+			vereignURL + '/api/js/iframe'
+		).then(function(lib) {
 			library = lib;
 			adjustUIState();
 		});
commit 15b8f9600933d3ec74beaec6f5ce262d4aba9602
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Thu Nov 22 12:20:12 2018 +0100
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Thu Nov 29 21:47:23 2018 +0100

    Vereign login logic and dialogs
    
    This adds various Vereign login dialogs:
    - pin code dialog
    - QR dialog
    - email/sms dialog
    
    Change-Id: I2400c76a7dbbb44ead10f6baaac561a71d3acd7f
    Reviewed-on: https://gerrit.libreoffice.org/63837
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    Tested-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/loleaflet/html/signing-identities.html b/loleaflet/html/signing-identities.html
new file mode 100644
index 000000000..c40b5f8cc
--- /dev/null
+++ b/loleaflet/html/signing-identities.html
@@ -0,0 +1,20 @@
+<style type="text/css">
+.identity-button {
+	background-color: #994392;
+	border: none;
+	color: white;
+	padding: 20px;
+	text-align: center;
+	text-decoration: none;
+	display: inline-block;
+	font-size: 32px;
+	margin: 4px 2px;
+	cursor: pointer;
+	border-radius: 50%;
+}
+</style>
+
+<p>Select identity:</p>
+<p><div id="identites"></div></p>
+<p><a href="#" id="login-qr">Login from mobile</a></p>
+<p><a href="#" id="recover-from-email">Recover from email</a></p>
diff --git a/loleaflet/src/control/Signing.js b/loleaflet/src/control/Signing.js
index 5318b3089..aa0550065 100644
--- a/loleaflet/src/control/Signing.js
+++ b/loleaflet/src/control/Signing.js
@@ -3,7 +3,7 @@
  * Document Signing
  */
 
-/* global window setupViamAPI w2ui */
+/* global window setupViamAPI w2ui vex $ */
 
 var library = null;
 var identity = null;
@@ -107,6 +107,120 @@ function adjustUIState() {
 	w2ui['document-signing-bar'].refresh();
 }
 
+function vereignPinCodeDialog(selectedIdentityKey) {
+	vex.dialog.open({
+		message: 'PIN Code',
+		input: '<input name="pincode" type="text" value="" required />',
+		callback: function(data) {
+			console.log(data.pincode);
+			if (data.pincode) {
+				if (library) {
+					return library.loadIdentity(selectedIdentityKey, data.pincode).then(function(result) {
+						if (isSuccess(result)) {
+							identity = result.data;
+							vereignLogin();
+						}
+						else {
+							identity = null;
+						}
+					});
+				}
+			}
+		}
+	});
+}
+
+function vereignLogin() {
+	if (library && identity) {
+		library.login(identity, 'previousaddeddevice').then(function(result) {
+			console.log(result);
+			if (isSuccess(result)) {
+				updateIndentity();
+				updatePassportList();
+				adjustUIState();
+			}
+		});
+	}
+}
+
+function verignQrDialog() {
+	if (library) {
+		library.createIdentity('00000000').then(function(result) {
+			if (isSuccess(result)) {
+				library.login(result.data, 'newdevice').then(function(result) {
+					vex.open({
+						content: '<div id="image-container"></div>',
+						showCloseButton: true,
+						escapeButtonCloses: true,
+						overlayClosesOnClick: true,
+						buttons: {},
+						afterOpen: function($vexContent) {
+							var container = $vexContent.find('#image-container');
+							var image = $('<img style="display: block; margin-left: auto; margin-right: auto"/>');
+							image.attr('src', result.data.image);
+							container.append(image);
+						},
+					});
+				});
+			}
+		});
+	}
+}
+
+function vereignRecoverFromEmail() {
+	if (library == null) {
+		return;
+	}
+	vex.dialog.open({
+		message: 'Login from email or mobile number',
+		input: '<input name="emailOrMobileNumber" type="text" value="" required />',
+		callback: function(data) {
+			if (data.emailOrMobileNumber) {
+				library.createIdentity('00000000').then(function(result) {
+					if (isSuccess(result)) {
+						var createdIdentity = result.data;
+						library.identityRestoreAccess(result.data, data.emailOrMobileNumber).then(function(result) {
+							if (isSuccess(result)) {
+								vex.dialog.open({
+									message: 'PIN Code',
+									input: '<p>Check your email</p><input name="pincode" type="text" value="" required />',
+									callback: function(data) {
+										console.log(data.pincode);
+										if (data.pincode) {
+											if (library) {
+												library.login(createdIdentity, 'sms', data.pincode).then(function(result) {
+													if (isSuccess(result)) {
+														vereignRestoreIdentity();
+													}
+												});
+											}
+										}
+									}
+								});
+							}
+						});
+					}
+				});
+			}
+		}
+	});
+}
+
+function vereignRestoreIdentity() {
+	if (library == null) {
+		return;
+	}
+	library.getCurrentlyAuthenticatedIdentity().then(function(result) {
+		if (isSuccess(result)) {
+			vex.closeAll();
+			identity = result.data;
+			updateIndentity();
+			updatePassportList();
+			adjustUIState();
+		}
+	});
+}
+
 L.Map.include({
 	showSignDocument: function() {
 		this.initializeLibrary();
@@ -141,6 +255,57 @@ L.Map.include({
 		}
 	},
 	signingLogin: function() {
+		var w = window.innerWidth / 2;
+
+		var loginWithQR = false;
+		var recoverFromEmail = false;
+		var selectedIdentityKey = null;
+
+		$.get('signing-identities.html', function(data) {
+			vex.open({
+				content: data,
+				showCloseButton: true,
+				escapeButtonCloses: true,
+				overlayClosesOnClick: true,
+				contentCSS: { width: w + 'px' },
+				buttons: {},
+				afterOpen: function($vexContent) {
+					library.listIdentities().then(function(response) {
+						var identities = response.data;
+						var identitiesDiv = $vexContent.find('#identites');
+						for (var key in identities) {
+							var button = $('<input class="identity-button" type="button"/>');
+							button.attr('value', identities[key].initials);
+							button.css('background-color', identities[key].identityColor);
+							button.click({ key: key }, function(current) {
+								selectedIdentityKey = current.data.key;
+								vex.close($vexContent.data().vex.id);
+							});
+							identitiesDiv.append(button);
+						}
+					});
+					$('#login-qr').click(function() {
+						loginWithQR = true;
+						vex.close($vexContent.data().vex.id);
+					});
+					$('#recover-from-email').click(function() {
+						recoverFromEmail = true;
+						vex.close($vexContent.data().vex.id);
+					});
+				},
+				afterClose: function () {
+					if (loginWithQR) {
+						verignQrDialog();
+					}
+					else if (recoverFromEmail) {
+						vereignRecoverFromEmail();
+					}
+					else if (selectedIdentityKey) {
+						vereignPinCodeDialog(selectedIdentityKey);
+					}
+				}
+			});
+		});
 	},
 	initializeLibrary: function() {
 		setupViamAPI(
@@ -148,15 +313,11 @@ L.Map.include({
 			{
 				onEvent: function(event) {
 					switch (event.type) {
+					case 'ActionConfirmedAndExecuted':
+						console.log('ActionConfirmedAndExecuted');
+						break;
 					case 'Authenticated':
-						library.getCurrentlyAuthenticatedIdentity().then(function(result) {
-							if (isSuccess(result)) {
-								identity = result.data;
-								updateIndentity();
-								updatePassportList();
-								adjustUIState();
-							}
-						});
+						vereignRestoreIdentity();
 						break;
 					default:
 						console.log('UNKNOWN EVENT: ' + event.type);
@@ -164,7 +325,7 @@ L.Map.include({
 					}
 				}
 			},
-			'https://integration1.vereign.com/api/js/iframe'
+			'https://integration2.vereign.com/api/js/iframe'
 		).then(function(lib)
 		{
 			library = lib;


More information about the Libreoffice-commits mailing list