ACC SHELL

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

{
textdomain "sudo";

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

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

any RedrawHostAlias(string name, list <string> members) {
	list <term> items = [];

	if (name != "") {
		UI::ChangeWidget(`id("host_alias_name"), `Value, name);
	}

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

	UI::ChangeWidget(`id("host_alias_members"),`Items, items);
	EnableDisableButtons("edit_host", "remove_host", items);

}

any AddEditHostAliasDialog (string what) {
	string caption = "";
	list < map <string, any> > ha = Sudo::GetHostAliases2();
        map <string, any> it = ha [ Sudo::GetItem() ]:$[];

	list <string> alias_members = [];
	string name = "";
	list <term> items = [];

	if (what == "Add") {
		caption = _("New Host Alias");
	} else if (what == "Edit") {
		alias_members = (list <string>) it["mem"]:[];
	        name = (string) it["name"]:"";
		caption = _("Existing Host Alias");
	}

	term contents = `VBox (
		`Left( `InputField(`id("host_alias_name"),_("Alias Name (in CAPITALS)"))),
		`Left(`Label(_("Hostnames or Networks in the Alias"))),
		`Table(`id("host_alias_members"),`header(_("Host Names/Networks")),[]),
		`Left(`HBox(
			`PushButton ( `id ( "add_host" ), `opt(`key_F3), " " + Label::AddButton() + " "),
			`PushButton ( `id ( "edit_host" ),  `opt(`key_F4),  " " + Label::EditButton() + " "),
			`PushButton ( `id ( "remove_host" ),   `opt(`key_F5), " " + Label::DeleteButton() + " ")
          ))
	);

	Wizard::SetContentsButtons(caption, contents, HELPS["host_alias"]:"",Label::CancelButton(), Label::OKButton());
	Wizard::HideAbortButton();
	UI::ChangeWidget (`id("host_alias_name"), `ValidChars, "_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");

	RedrawHostAlias( name, alias_members );

	any ret = nil;
	while(true) {

	    ret  = UI::UserInput();
	    /* next */
	    if(ret == `next) {
		string new_alias = toupper((string) UI::QueryWidget(`id("host_alias_name"),`Value));

		if (new_alias == "") {
		    Popup::Error(_("Alias name must not be empty."));
		    UI::SetFocus(`id("host_alias_name"));
		    continue;
		}
		if (name != new_alias) {
		    if (Sudo::SearchAlias2(new_alias, Sudo::GetHostAliases2())) {
			Popup::Error(sformat(_("Alias with name %1 already exists"),new_alias));
			UI::SetFocus(`id("host_alias_name"));
			continue;
		    }

		    //Sudo::RemoveHostAlias(current_alias_name);
		}
		if (alias_members == []) {
		    Popup::Error(_("Alias must have at least one member."));
		    UI::SetFocus(`id("host_alias_members"));
		    continue;
		}

		it["name"] = new_alias;
		it["mem"] = alias_members;
		Sudo::SetHostAlias(Sudo::GetItem(),it);
		Sudo::SetModified();
		break;

	    /* back */
	    }else if(ret == `back) {
	        break;
	    /* unknown */
	    }else if(ret == "add_host"){
		string new_member = AddHostDialog(""); 

		if(new_member != "") {
			alias_members = add(alias_members, new_member);
			RedrawHostAlias("",alias_members);
		}
		/* edit hosts*/
		} else if (ret == "edit_host") {
			string current_item = (string) UI::QueryWidget(`id("host_alias_members"), `CurrentItem);
			string new_member = AddHostDialog(current_item);

			if (current_item != new_member) {
				alias_members = filter (string s, alias_members, ``( s != current_item));
				alias_members = add(alias_members, new_member);
				RedrawHostAlias("", alias_members);
			}
		/* delete hosts */
		}else if (ret == "remove_host"){
			string current_item = (string) UI::QueryWidget(`id("host_alias_members"), `CurrentItem);

			alias_members = filter(string s, alias_members, ``(s != current_item));
			RedrawHostAlias("",alias_members);
	    /* unknown */
	     }else {
	        y2error("unexpected retcode: %1", ret);
	        continue;
	    }

	}

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

any SaveHostAliases () {
	return `next;
}

}

ACC SHELL 2018