ACC SHELL

Path : /usr/share/YaST2/include/sudo/
File Upload :
Current File : //usr/share/YaST2/include/sudo/dialog-runas.ycp

{
textdomain "sudo";

import "Label";
import "Wizard";
import "Sudo";
import "Report";

include "sudo/complex.ycp";
include "sudo/helps.ycp";

void RedrawRunAsAlias( list <string> members ) {
	list <term> items = [];

	foreach(string it, members, {
		items = add(items, `item(`id(it),it));
	});

	UI::ChangeWidget(`id("runas_alias_members"),`Items, items);
	UI::ChangeWidget(`id("remove_member"), `Enabled, (items != []));

}

any AddEditRunAsAliasDialog (string what) {
	string caption = "";
	list < map <string, any> > ra = Sudo::GetRunAsAliases2();
	map <string, any> it = ra[ Sudo::GetItem() ]: $[];

	list <string> alias_members = [];
	string name = "";
	list <term> items = [];
	list <string> users = (list <string>) merge(Sudo::all_users,Sudo::GetAliasNames("run_as")) ;

	if (what == "Add") {
		caption = _("New RunAs Alias");
	} else if (what == "Edit") {
		alias_members = (list <string>) it["mem"]:[];
		name = (string) it["name"]:"";
		foreach(string member, alias_members, {
			users = filter(string user, users, ``(user != member));
		});
		caption = _("Existing RunAs Alias");
	}

	term contents = `VBox (
		`Left(`InputField(`id("runas_alias_name"),_("Alias Name (in CAPITALS)"))),
		`VSpacing(1),
		`VBox(
		    `Table(`id("runas_alias_members"), `opt(`hstretch,`vstretch), `header(_("Alias Members")),[]),
		    `HBox(
                        `PushButton ( `id ( "add_member" ), `opt ( `key_F3), " " + Label::AddButton() + " "),
                        `PushButton ( `id ( "remove_member" ), `opt (  `key_F5), " " + Label::DeleteButton() + " "),
                        `HStretch()
                    )
                 )

	    );

	Wizard::SetContentsButtons(caption, contents,HELPS["runas_alias"]:"",Label::CancelButton(), Label::OKButton());
	Wizard::HideAbortButton();
	UI::ChangeWidget (`id("runas_alias_name"), `ValidChars, "_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
	UI::ChangeWidget (`id("runas_alias_name"), `Value, name);

	RedrawRunAsAlias(alias_members);

	any ret = nil;
	while(true) {

	    ret  = UI::UserInput();
	    /* next */
	    if(ret == `next) {
		string new_alias = toupper((string) UI::QueryWidget(`id("runas_alias_name"),`Value));
		if (new_alias == "") {
		    Popup::Error(_("Alias name must not be empty."));
		    UI::SetFocus(`id("runas_alias_name"));
		    continue;
		}
		if (name != new_alias) {
		    if(Sudo::SearchAlias2( new_alias, Sudo::GetRunAsAliases2() )) {
		        Popup::Error(sformat(_("Alias with name %1 already exists"),new_alias));
		        UI::SetFocus(`id("runas_alias_name"));
			continue;
		    }
		}
		if (alias_members == []) {
		    Popup::Error(_("Alias must have at least one member."));
		    UI::SetFocus(`id("runas_alias_members"));
		   continue;
		}

		it["name"] = new_alias;
		it["mem"] = alias_members;
		Sudo::SetRunAsAlias(Sudo::GetItem(), it);
		Sudo::SetModified();
		break;
		/* back */
	    }else if(ret == `back) {
	        break;
		/* add users*/
	    } else if(ret == "add_member"){
		string new_member = AddUserDialog( users );

		if (new_member != "")
		{
		    alias_members = add(alias_members, new_member);
		    users = filter(string s, users, ``(s != new_member));
		    RedrawRunAsAlias(alias_members);
		}
		/* delete users */
	    } else if (ret == "remove_member"){
		string current_item = (string) UI::QueryWidget(`id("runas_alias_members"), `CurrentItem);
		alias_members = filter(string s, alias_members, ``(s != current_item));
		users = add(users, current_item);
		RedrawRunAsAlias(alias_members);
	    /* unknown */
	    } else {
	        y2error("unexpected retcode: %1", ret);
	        continue;
	    }
	}

	initial_screen = "runas_aliases";
	Wizard::RestoreNextButton();
	return ret;
}

any SaveRunAsAliases () {
	return `next;
}

}

ACC SHELL 2018