From 7b41922c2da45848d1fa6ee0c545c560e3d688ff Mon Sep 17 00:00:00 2001
From: shortcutme <tamas@zeronet.io>
Date: Wed, 29 May 2019 16:02:10 +0200
Subject: [PATCH] Use user certificate if possible for signing using sidebar,
 more sign, publish to separate functions

---
 plugins/Sidebar/media/Sidebar.coffee | 53 ++++++++++++++--------------
 1 file changed, 26 insertions(+), 27 deletions(-)

diff --git a/plugins/Sidebar/media/Sidebar.coffee b/plugins/Sidebar/media/Sidebar.coffee
index d24d373b..ab9f5316 100644
--- a/plugins/Sidebar/media/Sidebar.coffee
+++ b/plugins/Sidebar/media/Sidebar.coffee
@@ -332,6 +332,18 @@ class Sidebar extends Class
 		if not @opened
 			@onClosed()
 
+	sign: (inner_path, privatekey) ->
+		@wrapper.displayProgress("sign", "Signing: #{inner_path}...", 0)
+		@wrapper.ws.cmd "siteSign", {privatekey: privatekey, inner_path: inner_path, update_changed_files: true}, (res) =>
+			if res == "ok"
+				@wrapper.displayProgress("sign", "#{inner_path} signed!", 100)
+			else
+				@wrapper.displayProgress("sign", "Error signing #{inner_path}", -1)
+
+	publish: (inner_path, privatekey) ->
+		@wrapper.ws.cmd "sitePublish", {privatekey: privatekey, inner_path: inner_path, sign: true, update_changed_files: true}, (res) =>
+			if res == "ok"
+				@wrapper.notifications.add "sign", "done", "#{inner_path} Signed and published!", 5000
 
 	onOpened: ->
 		@log "Opened"
@@ -474,23 +486,17 @@ class Sidebar extends Class
 		menu.addItem "Sign", =>
 			inner_path = @tag.find("#input-contents").val()
 
-			@wrapper.ws.cmd "fileRules", {inner_path: inner_path}, (res) =>
-				if @wrapper.site_info.privatekey
-					# Privatekey stored in users.json
-					@wrapper.ws.cmd "siteSign", {privatekey: "stored", inner_path: inner_path, update_changed_files: true}, (res) =>
-						if res == "ok"
-							@wrapper.notifications.add "sign", "done", "#{inner_path} Signed!", 5000
-				else if @wrapper.site_info.auth_address in res.signers
+			@wrapper.ws.cmd "fileRules", {inner_path: inner_path}, (rules) =>
+				if @wrapper.site_info.auth_address in rules.signers
 					# ZeroID or other ID provider
-					@wrapper.ws.cmd "siteSign", {privatekey: null, inner_path: inner_path, update_changed_files: true}, (res) =>
-						if res == "ok"
-							@wrapper.notifications.add "sign", "done", "#{inner_path} Signed!", 5000
+					@sign(inner_path)
+				else if @wrapper.site_info.privatekey
+					# Privatekey stored in users.json
+					@sign(inner_path, "stored")
 				else
 					# Ask the user for privatekey
 					@wrapper.displayPrompt "Enter your private key:", "password", "Sign", "", (privatekey) => # Prompt the private key
-						@wrapper.ws.cmd "siteSign", {privatekey: privatekey, inner_path: inner_path, update_changed_files: true}, (res) =>
-							if res == "ok"
-								@wrapper.notifications.add "sign", "done", "#{inner_path} Signed!", 5000
+						@sign(inner_path, privatekey)
 
 			@tag.find(".contents + .flex").removeClass "active"
 			menu.hide()
@@ -519,24 +525,17 @@ class Sidebar extends Class
 		@tag.find("#button-sign-publish").off("click touchend").on "click touchend", =>
 			inner_path = @tag.find("#input-contents").val()
 
-			@wrapper.ws.cmd "fileRules", {inner_path: inner_path}, (res) =>
-				if @wrapper.site_info.privatekey
-					# Privatekey stored in users.json
-					@wrapper.ws.cmd "sitePublish", {privatekey: "stored", inner_path: inner_path, sign: true, update_changed_files: true}, (res) =>
-						if res == "ok"
-							@wrapper.notifications.add "sign", "done", "#{inner_path} Signed and published!", 5000
-				else if @wrapper.site_info.auth_address in res.signers
+			@wrapper.ws.cmd "fileRules", {inner_path: inner_path}, (rules) =>
+				if @wrapper.site_info.auth_address in rules.signers
 					# ZeroID or other ID provider
-					@wrapper.ws.cmd "sitePublish", {privatekey: null, inner_path: inner_path, sign: true, update_changed_files: true}, (res) =>
-						if res == "ok"
-							@wrapper.notifications.add "sign", "done", "#{inner_path} Signed and published!", 5000
+					@publish(inner_path, null)
+				else if @wrapper.site_info.privatekey
+					# Privatekey stored in users.json
+					@publish(inner_path, "stored")
 				else
 					# Ask the user for privatekey
 					@wrapper.displayPrompt "Enter your private key:", "password", "Sign", "", (privatekey) => # Prompt the private key
-						@wrapper.ws.cmd "sitePublish", {privatekey: privatekey, inner_path: inner_path, sign: true, update_changed_files: true}, (res) =>
-							if res == "ok"
-								@wrapper.notifications.add "sign", "done", "#{inner_path} Signed and published!", 5000
-
+						@publish(inner_path, privatekey)
 			return false
 
 		# Close