approve mode, cm sync option

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages
2022-11-20 15:53:08 +08:00
parent 8b20237096
commit 05c549a5fe
39 changed files with 298 additions and 56 deletions

View File

@@ -135,6 +135,10 @@ impl SciterConnectionManager {
fn elevate_portable(&self, id: i32) {
crate::ui_cm_interface::elevate_portable(id);
}
fn get_option(&self, key: String) -> String {
crate::ui_interface::get_option(key)
}
}
impl sciter::EventHandler for SciterConnectionManager {
@@ -155,5 +159,6 @@ impl sciter::EventHandler for SciterConnectionManager {
fn send_msg(i32, String);
fn can_elevate();
fn elevate_portable(i32);
fn get_option(String);
}
}

View File

@@ -30,6 +30,7 @@ class Body: Reactor.Component
var right_style = show_chat ? "" : "display: none";
var disconnected = c.disconnected;
var show_elevation_btn = handler.can_elevate() && show_elevation;
var show_accept_btn = handler.get_option('approve-mode') != 'password';
// below size:* is work around for Linux, it alreayd set in css, but not work, shit sciter
return <div .content style="size:*">
<div .left-panel>
@@ -58,16 +59,15 @@ class Body: Reactor.Component
{c.port_forward ? <div>Port Forwarding: {c.port_forward}</div> : ""}
<div style="size:*"/>
<div .outer_buttons>
{!auth && !disconnected && show_elevation_btn ? <button #elevate_accept .control .elevate .button><span><span><span>{svg_elevate}</span><span>{translate('Accept')}</span></span></span></button> : "" }
{!auth && !disconnected && show_elevation_btn && show_accept_btn ? <button #elevate_accept .control .elevate .button><span><span><span>{svg_elevate}</span><span>{translate('Accept')}</span></span></span></button> : "" }
{auth && !disconnected && show_elevation_btn ? <button #elevate .control .elevate .button><span><span><span>{svg_elevate}</span><span>{translate('Elevate')}</span></span></span></button> : "" }
<div .inner_buttons style={auth ? "display:none;":""}>
{!auth ? <button #accept .control .button>{translate('Accept')}</button> : "" }
{!auth && show_accept_btn ? <button #accept .control .button>{translate('Accept')}</button> : "" }
{!auth ? <button #dismiss .control .outline>{translate('Dismiss')}</button> : "" }
</div>
{auth && !disconnected ? <button #disconnect .control .button>{translate('Disconnect')}</button> : "" }
{auth && disconnected ? <button #close .control .button>{translate('Close')}</button> : "" }
</div>
<div style={!show_elevation_btn ? "height:1 em;" : "display:none;"}></div>
{c.is_file_transfer || c.port_forward ? "" : <div .chaticon>{svg_chat}</div>}
</div>
<div .right-panel style={right_style}>
@@ -453,6 +453,21 @@ function getElaspsed(time, now) {
return out;
}
var ui_status_cache = [""];
function check_update_ui() {
self.timer(1s, function() {
var approve_mode = handler.get_option('approve-mode');
var changed = false;
if (ui_status_cache[0] != approve_mode) {
ui_status_cache[0] = approve_mode;
changed = true;
}
if (changed) update();
check_update_ui();
});
}
check_update_ui();
function updateTime() {
self.timer(1s, function() {
var now = new Date();

View File

@@ -264,6 +264,13 @@ function msgbox(type, title, content, link="", callback=null, height=180, width=
};
} else if (type.indexOf("custom") < 0 && !is_port_forward && !callback) {
callback = function() { view.close(); }
} else if (type == 'wait-remote-accept-nook') {
callback = function (res) {
if (!res) {
view.close();
return;
}
};
}
last_msgbox_tag = type + "-" + title + "-" + content + "-" + link;
$(#msgbox).content(<MsgboxComponent width={width} height={height} auto_login={auto_login} type={type} title={title} content={content} link={link} remember={remember} callback={callback} contentStyle={contentStyle} hasRetry={hasRetry} />);

View File

@@ -824,7 +824,8 @@ function watch_screen_recording() {
class PasswordEyeArea : Reactor.Component {
render() {
var method = handler.get_option('verification-method');
var value = method != 'use-permanent-password' ? password_cache[0] : "-";
var mode= handler.get_option('approve-mode');
var value = mode == 'click' || method == 'use-permanent-password' ? "-" : password_cache[0];
return
<div .eye-area style="width: *">
<input|text @{this.input} readonly value={value} />
@@ -901,27 +902,46 @@ class PasswordArea: Reactor.Component {
function renderPop() {
var method = handler.get_option('verification-method');
var approve_mode= handler.get_option('approve-mode');
var show_password = approve_mode != 'click';
return <popup><menu.context #edit-password-context>
<li #use-temporary-password><span>{svg_checkmark}</span>{translate('Use temporary password')}</li>
<li #use-permanent-password><span>{svg_checkmark}</span>{translate('Use permanent password')}</li>
<li #use-both-passwords><span>{svg_checkmark}</span>{translate('Use both passwords')}</li>
<div .separator />
<li #set-password disabled={ method == 'use-temporary-password' ? "true" : "false" }>{translate('Set permanent password')}</li>
<TemporaryPasswordLengthMenu />
<li #approve-mode-password><span>{svg_checkmark}</span>{translate('Accept sessions via password')}</li>
<li #approve-mode-click><span>{svg_checkmark}</span>{translate('Accept sessions via click')}</li>
<li #approve-mode-both><span>{svg_checkmark}</span>{translate('Accept sessions via both')}</li>
{ !show_password ? '' : <div .separator /> }
{ !show_password ? '' : <li #use-temporary-password><span>{svg_checkmark}</span>{translate('Use temporary password')}</li> }
{ !show_password ? '' : <li #use-permanent-password><span>{svg_checkmark}</span>{translate('Use permanent password')}</li> }
{ !show_password ? '' : <li #use-both-passwords><span>{svg_checkmark}</span>{translate('Use both passwords')}</li> }
{ !show_password ? '' : <div .separator /> }
{ !show_password ? '' : <li #set-password disabled={ method == 'use-temporary-password' ? "true" : "false" }>{translate('Set permanent password')}</li> }
{ !show_password ? '' : <TemporaryPasswordLengthMenu /> }
</menu></popup>;
}
function toggleMenuState() {
var id = handler.get_option('verification-method');
if (id != 'use-temporary-password' && id != 'use-permanent-password')
id = 'use-both-passwords';
for (var el in [this.$(li#use-temporary-password), this.$(li#use-permanent-password), this.$(li#use-both-passwords)]) {
el.attributes.toggleClass("selected", el.id == id);
var mode= handler.get_option('approve-mode');
var mode_id;
if (mode == 'password')
mode_id = 'approve-mode-password';
else if (mode == 'click')
mode_id = 'approve-mode-click';
else
mode_id = 'approve-mode-both';
var pwd_id = handler.get_option('verification-method');
if (pwd_id != 'use-temporary-password' && pwd_id != 'use-permanent-password')
pwd_id = 'use-both-passwords';
for (var el in this.$$(menu#edit-password-context>li)) {
if (el.id.indexOf("approve-mode-") == 0)
el.attributes.toggleClass("selected", el.id == mode_id);
if (el.id.indexOf("use-") == 0)
el.attributes.toggleClass("selected", el.id == pwd_id);
}
}
event click $(svg#edit) (_, me) {
temporaryPasswordLengthMenu.update({show: true });
var approve_mode= handler.get_option('approve-mode');
var show_password = approve_mode != 'click';
if(show_password && temporaryPasswordLengthMenu) temporaryPasswordLengthMenu.update({show: true });
var menu = $(menu#edit-password-context);
me.popup(menu);
}
@@ -954,16 +974,28 @@ class PasswordArea: Reactor.Component {
handler.set_option('verification-method', me.id);
this.toggleMenuState();
passwordArea.update();
} else if (me.id.indexOf('approve-mode') == 0) {
var approve_mode;
if (me.id == 'approve-mode-password')
approve_mode = 'password';
else if (me.id == 'approve-mode-click')
approve_mode = 'click';
else
approve_mode = '';
handler.set_option('approve-mode', approve_mode);
this.toggleMenuState();
passwordArea.update();
}
}
}
var password_cache = ["","",""];
var password_cache = ["","","",""];
function updatePasswordArea() {
self.timer(1s, function() {
var temporary_password = handler.temporary_password();
var verification_method = handler.get_option('verification-method');
var temporary_password_length = handler.get_option('temporary-password-length');
var approve_mode = handler.get_option('approve-mode');
var update = false;
if (password_cache[0] != temporary_password) {
password_cache[0] = temporary_password;
@@ -977,6 +1009,10 @@ function updatePasswordArea() {
password_cache[2] = temporary_password_length;
update = true;
}
if (password_cache[3] != approve_mode) {
password_cache[3] = approve_mode;
update = true;
}
if (update) passwordArea.update();
updatePasswordArea();
});