Merge pull request #791 from kodumbeats/feat-535-show-hide-secrets-inside-dashboard
Feat 535 show hide secrets inside dashboard
This commit is contained in:
commit
9ea194bd6b
|
@ -51,6 +51,7 @@
|
|||
- Upgraded Influxdb Docker image to version 1.8 (alpine)
|
||||
- Added option to disable mail sending by setting empty SMTP host
|
||||
- Upgraded installation script ([#490](https://github.com/appwrite/appwrite/issues/490))
|
||||
- Added toggle to hide/show secret keys and passwords inside the dashboard (@kodumbeats, [#535](https://github.com/appwrite/appwrite/issues/535))
|
||||
|
||||
## Breaking Changes (Read before upgrading!)
|
||||
- **Deprecated** `first` and `last` query params for documents list route in the database API
|
||||
|
|
|
@ -189,7 +189,7 @@
|
|||
</div>
|
||||
<div class="col span-6 margin-bottom">
|
||||
<label data-ls-attrs="for=httpPass-{{task.$id}}">Password</label>
|
||||
<input type="password" class="full-width margin-bottom-no" data-ls-attrs="id=httpPass-{{task.$id}}" name="httpPass" autocomplete="off" data-ls-bind="{{task.httpPass}}" />
|
||||
<input data-forms-show-secret type="password" class="full-width margin-bottom-no" data-ls-attrs="id=httpPass-{{task.$id}}" name="httpPass" autocomplete="off" data-ls-bind="{{task.httpPass}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -335,7 +335,7 @@
|
|||
</div>
|
||||
<div class="col span-6 margin-bottom">
|
||||
<label for="httpPass">Password</label>
|
||||
<input type="password" class="full-width margin-bottom-no" id="httpPass" name="httpPass" autocomplete="off" />
|
||||
<input type="password" data-forms-show-secret class="full-width margin-bottom-no" id="httpPass" name="httpPass" autocomplete="off" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -339,7 +339,7 @@ $providers = $this->getParam('providers', []);
|
|||
<input name="appId" id="oauth2<?php echo $this->escape(ucfirst($provider)); ?>Appid" type="text" autocomplete="off" data-ls-bind="{{console-project.usersOauth2<?php echo $this->escape(ucfirst($provider)); ?>Appid}}">
|
||||
|
||||
<label for="oauth2<?php echo $this->escape(ucfirst($provider)); ?>Secret">App Secret</label>
|
||||
<input name="secret" id="oauth2<?php echo $this->escape(ucfirst($provider)); ?>Secret" type="text" autocomplete="off" data-ls-bind="{{console-project.usersOauth2<?php echo $this->escape(ucfirst($provider)); ?>Secret}}">
|
||||
<input name="secret" data-forms-show-secret data-forms-show-secret-above="true" id="oauth2<?php echo $this->escape(ucfirst($provider)); ?>Secret" type="password" autocomplete="off" data-ls-bind="{{console-project.usersOauth2<?php echo $this->escape(ucfirst($provider)); ?>Secret}}">
|
||||
<?php else: ?>
|
||||
<label for="oauth2<?php echo $this->escape(ucfirst($provider)); ?>Appid">Bundle ID <span class="tooltip" data-tooltip="Attribute internal display name"><i class="icon-info-circled"></i></span></label>
|
||||
<input name="appId" id="oauth2<?php echo $this->escape(ucfirst($provider)); ?>Appid" type="text" autocomplete="off" data-ls-bind="{{console-project.usersOauth2<?php echo $this->escape(ucfirst($provider)); ?>Appid}}" placeholder="com.company.appname" />
|
||||
|
|
|
@ -104,7 +104,7 @@ $events = array_keys($this->getParam('events', []));
|
|||
</div>
|
||||
<div class="col span-6 margin-bottom">
|
||||
<label data-ls-attrs="for=httpPass-{{webhook.$id}}">Password</label>
|
||||
<input type="password" class="full-width margin-bottom-no" data-ls-attrs="id=httpPass-{{webhook.$id}}" name="httpPass" autocomplete="off" data-ls-bind="{{webhook.httpPass}}" />
|
||||
<input type="password" data-forms-show-secret class="full-width margin-bottom-no" data-ls-attrs="id=httpPass-{{webhook.$id}}" name="httpPass" autocomplete="off" data-ls-bind="{{webhook.httpPass}}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -220,7 +220,7 @@ $events = array_keys($this->getParam('events', []));
|
|||
</div>
|
||||
<div class="col span-6 margin-bottom">
|
||||
<label for="httpPass">Password</label>
|
||||
<input type="password" class="full-width margin-bottom-no" id="httpPass" name="httpPass" autocomplete="off" />
|
||||
<input type="password" data-forms-show-secret class="full-width margin-bottom-no" id="httpPass" name="httpPass" autocomplete="off" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -56,6 +56,7 @@ const configApp = {
|
|||
'public/scripts/views/forms/remove.js',
|
||||
'public/scripts/views/forms/run.js',
|
||||
'public/scripts/views/forms/select-all.js',
|
||||
'public/scripts/views/forms/show-secret.js',
|
||||
'public/scripts/views/forms/switch.js',
|
||||
'public/scripts/views/forms/tags.js',
|
||||
'public/scripts/views/forms/text-count.js',
|
||||
|
|
3
public/dist/scripts/app-all.js
vendored
3
public/dist/scripts/app-all.js
vendored
|
@ -2331,7 +2331,8 @@ score+=(variationCount-1)*10;return parseInt(score);};var callback=function(){va
|
|||
if(rtl.isRTL(content)){paragraph.style.direction='rtl';paragraph.style.textAlign='right';}
|
||||
else{paragraph.style.direction='ltr';paragraph.style.textAlign='left';}
|
||||
last=paragraph;}};var santize=function(e){clean(e);alignText(e);};element.addEventListener("change",function(){editor.content.innerHTML=markdown.render(element.value);alignText();});editor.content.setAttribute("placeholder",element.placeholder);editor.content.innerHTML=markdown.render(element.value);editor.content.tabIndex=0;alignText();editor.content.onkeydown=function preventTab(event){if(event.which===9){event.preventDefault();if(document.activeElement){var focussable=Array.prototype.filter.call(document.querySelectorAll('a:not([disabled]), button:not([disabled]), select:not([disabled]), input[type=text]:not([disabled]), input[type=checkbox]:not([disabled]), [tabindex]:not([disabled]):not([tabindex="-1"])'),function(element){return(element.offsetWidth>0||element.offsetHeight>0||element===document.activeElement);});var index=focussable.indexOf(document.activeElement);if(index>-1){if(event.shiftKey){var prevElement=focussable[index-1]||focussable[focussable.length-1];prevElement.focus();}else{var nextElement=focussable[index+1]||focussable[0];nextElement.focus();}}}}};div.addEventListener("paste",santize);div.addEventListener("drop",santize);}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-remove",controller:function(element){Array.prototype.slice.call(element.querySelectorAll("[data-remove]")).map(function(obj){obj.addEventListener("click",function(){element.parentNode.removeChild(element);});});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-run",repeat:false,controller:function(element,expression,container){let action=expression.parse(element.dataset["formsRun"]||'');element.addEventListener('click',function(){return container.path(action)();});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-select-all",controller:function(element){let select=document.createElement("button");let unselect=document.createElement("button");select.textContent='Select All';unselect.textContent='Unselect All';select.classList.add('link');select.classList.add('margin-top-tiny');select.classList.add('margin-start-small');select.classList.add('text-size-small');select.classList.add('pull-end');unselect.classList.add('link');unselect.classList.add('margin-top-tiny');unselect.classList.add('margin-start-small');unselect.classList.add('text-size-small');unselect.classList.add('pull-end');select.type='button';unselect.type='button';element.parentNode.insertBefore(select,element);element.parentNode.insertBefore(unselect,element);select.addEventListener('click',function(){let checkboxes=document.querySelectorAll("input[type='checkbox']");for(var i=0;i<checkboxes.length;i++){checkboxes[i].checked=true;}})
|
||||
unselect.addEventListener('click',function(){let checkboxes=document.querySelectorAll("input[type='checkbox']");for(var i=0;i<checkboxes.length;i++){checkboxes[i].checked=false;}})}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-switch",controller:function(element){let input=window.document.createElement("input");input.type="checkbox";input.className="button switch";let syncA=function(){let value=input.checked?"true":"false"
|
||||
unselect.addEventListener('click',function(){let checkboxes=document.querySelectorAll("input[type='checkbox']");for(var i=0;i<checkboxes.length;i++){checkboxes[i].checked=false;}})}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-show-secret",controller:function(element,document){let button=document.createElement("a");button.type="button";button.className="icon-eye";button.innerHTML="show/hide";button.style.cursor="pointer";button.style.fontSize="10px";if(element.attributes.getNamedItem("data-forms-show-secret-above")){element.insertAdjacentElement("beforebegin",button);}else{element.parentNode.insertBefore(button,element.nextSibling);}
|
||||
const toggle=function(event){switch(element.type){case"password":element.type="text";break;case"text":element.type="password";break;default:console.warn("data-forms-show-secret: element.type NOT text NOR password");}};button.addEventListener("click",toggle);},});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-switch",controller:function(element){let input=window.document.createElement("input");input.type="checkbox";input.className="button switch";let syncA=function(){let value=input.checked?"true":"false"
|
||||
let old=element.value;element.value=value;if(value!==old){element.dispatchEvent(new Event('change'));}};let syncB=function(){input.checked=(element.value==="true");};input.addEventListener("input",syncA);input.addEventListener("change",syncA);element.addEventListener("input",syncB);element.addEventListener("change",syncB);syncA();element.parentNode.insertBefore(input,element);}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-tags",controller:function(element){let array=[];let tags=window.document.createElement("div");let preview=window.document.createElement("ul");let add=window.document.createElement("input");let listen=function(event){if((event.key==="Enter"||event.key===" "||event.key==="Tab")&&add.value.length>0){array.push(add.value);add.value="";element.value=JSON.stringify(array);check();if(event.key!=="Tab"){event.preventDefault();}}
|
||||
if((event.key==="Backspace"||event.key==="Delete")&&add.value===""){array.splice(-1,1);element.value=JSON.stringify(array);check();}
|
||||
return false;};let check=function(){try{array=JSON.parse(element.value)||[];}catch(error){array=[];}
|
||||
|
|
3
public/dist/scripts/app.js
vendored
3
public/dist/scripts/app.js
vendored
|
@ -376,7 +376,8 @@ score+=(variationCount-1)*10;return parseInt(score);};var callback=function(){va
|
|||
if(rtl.isRTL(content)){paragraph.style.direction='rtl';paragraph.style.textAlign='right';}
|
||||
else{paragraph.style.direction='ltr';paragraph.style.textAlign='left';}
|
||||
last=paragraph;}};var santize=function(e){clean(e);alignText(e);};element.addEventListener("change",function(){editor.content.innerHTML=markdown.render(element.value);alignText();});editor.content.setAttribute("placeholder",element.placeholder);editor.content.innerHTML=markdown.render(element.value);editor.content.tabIndex=0;alignText();editor.content.onkeydown=function preventTab(event){if(event.which===9){event.preventDefault();if(document.activeElement){var focussable=Array.prototype.filter.call(document.querySelectorAll('a:not([disabled]), button:not([disabled]), select:not([disabled]), input[type=text]:not([disabled]), input[type=checkbox]:not([disabled]), [tabindex]:not([disabled]):not([tabindex="-1"])'),function(element){return(element.offsetWidth>0||element.offsetHeight>0||element===document.activeElement);});var index=focussable.indexOf(document.activeElement);if(index>-1){if(event.shiftKey){var prevElement=focussable[index-1]||focussable[focussable.length-1];prevElement.focus();}else{var nextElement=focussable[index+1]||focussable[0];nextElement.focus();}}}}};div.addEventListener("paste",santize);div.addEventListener("drop",santize);}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-remove",controller:function(element){Array.prototype.slice.call(element.querySelectorAll("[data-remove]")).map(function(obj){obj.addEventListener("click",function(){element.parentNode.removeChild(element);});});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-run",repeat:false,controller:function(element,expression,container){let action=expression.parse(element.dataset["formsRun"]||'');element.addEventListener('click',function(){return container.path(action)();});}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-select-all",controller:function(element){let select=document.createElement("button");let unselect=document.createElement("button");select.textContent='Select All';unselect.textContent='Unselect All';select.classList.add('link');select.classList.add('margin-top-tiny');select.classList.add('margin-start-small');select.classList.add('text-size-small');select.classList.add('pull-end');unselect.classList.add('link');unselect.classList.add('margin-top-tiny');unselect.classList.add('margin-start-small');unselect.classList.add('text-size-small');unselect.classList.add('pull-end');select.type='button';unselect.type='button';element.parentNode.insertBefore(select,element);element.parentNode.insertBefore(unselect,element);select.addEventListener('click',function(){let checkboxes=document.querySelectorAll("input[type='checkbox']");for(var i=0;i<checkboxes.length;i++){checkboxes[i].checked=true;}})
|
||||
unselect.addEventListener('click',function(){let checkboxes=document.querySelectorAll("input[type='checkbox']");for(var i=0;i<checkboxes.length;i++){checkboxes[i].checked=false;}})}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-switch",controller:function(element){let input=window.document.createElement("input");input.type="checkbox";input.className="button switch";let syncA=function(){let value=input.checked?"true":"false"
|
||||
unselect.addEventListener('click',function(){let checkboxes=document.querySelectorAll("input[type='checkbox']");for(var i=0;i<checkboxes.length;i++){checkboxes[i].checked=false;}})}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-show-secret",controller:function(element,document){let button=document.createElement("a");button.type="button";button.className="icon-eye";button.innerHTML="show/hide";button.style.cursor="pointer";button.style.fontSize="10px";if(element.attributes.getNamedItem("data-forms-show-secret-above")){element.insertAdjacentElement("beforebegin",button);}else{element.parentNode.insertBefore(button,element.nextSibling);}
|
||||
const toggle=function(event){switch(element.type){case"password":element.type="text";break;case"text":element.type="password";break;default:console.warn("data-forms-show-secret: element.type NOT text NOR password");}};button.addEventListener("click",toggle);},});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-switch",controller:function(element){let input=window.document.createElement("input");input.type="checkbox";input.className="button switch";let syncA=function(){let value=input.checked?"true":"false"
|
||||
let old=element.value;element.value=value;if(value!==old){element.dispatchEvent(new Event('change'));}};let syncB=function(){input.checked=(element.value==="true");};input.addEventListener("input",syncA);input.addEventListener("change",syncA);element.addEventListener("input",syncB);element.addEventListener("change",syncB);syncA();element.parentNode.insertBefore(input,element);}});})(window);(function(window){"use strict";window.ls.container.get("view").add({selector:"data-forms-tags",controller:function(element){let array=[];let tags=window.document.createElement("div");let preview=window.document.createElement("ul");let add=window.document.createElement("input");let listen=function(event){if((event.key==="Enter"||event.key===" "||event.key==="Tab")&&add.value.length>0){array.push(add.value);add.value="";element.value=JSON.stringify(array);check();if(event.key!=="Tab"){event.preventDefault();}}
|
||||
if((event.key==="Backspace"||event.key==="Delete")&&add.value===""){array.splice(-1,1);element.value=JSON.stringify(array);check();}
|
||||
return false;};let check=function(){try{array=JSON.parse(element.value)||[];}catch(error){array=[];}
|
||||
|
|
38
public/scripts/views/forms/show-secret.js
Normal file
38
public/scripts/views/forms/show-secret.js
Normal file
|
@ -0,0 +1,38 @@
|
|||
(function (window) {
|
||||
"use strict";
|
||||
|
||||
window.ls.container.get("view").add({
|
||||
selector: "data-forms-show-secret",
|
||||
controller: function (element, document) {
|
||||
let button = document.createElement("a");
|
||||
button.type = "button";
|
||||
button.className = "icon-eye";
|
||||
button.innerHTML = "show/hide";
|
||||
button.style.cursor = "pointer";
|
||||
button.style.fontSize = "10px";
|
||||
|
||||
if (element.attributes.getNamedItem("data-forms-show-secret-above")) {
|
||||
element.insertAdjacentElement("beforebegin", button);
|
||||
} else {
|
||||
element.parentNode.insertBefore(button, element.nextSibling);
|
||||
}
|
||||
|
||||
const toggle = function (event) {
|
||||
switch (element.type) {
|
||||
case "password":
|
||||
element.type = "text";
|
||||
break;
|
||||
case "text":
|
||||
element.type = "password";
|
||||
break;
|
||||
default:
|
||||
console.warn(
|
||||
"data-forms-show-secret: element.type NOT text NOR password"
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
button.addEventListener("click", toggle);
|
||||
},
|
||||
});
|
||||
})(window);
|
Loading…
Reference in a new issue