ACC SHELL

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

{
textdomain "sudo";

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

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

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

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

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

any AddEditUserAliasDialog (string what) {
	string caption = "";
	list < map <string, any> > ua = Sudo::GetUserAliases2();
	map <string, any> it = ua [ Sudo::GetItem() ]: $[];

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

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

	term contents = `VBox (
		`Left( `InputField(`id("user_alias_name"),_("Alias Name (in CAPITALS)"))),
		`VSpacing(1),
		`Table(`id("user_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["user_alias"]:"",Label::CancelButton(), Label::OKButton());
	Wizard::HideAbortButton();
	UI::ChangeWidget (`id("user_alias_name"), `ValidChars, "_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
	UI::ChangeWidget(`id("user_alias_name"), `Value, name);

	RedrawUserAlias( alias_members );

	any ret = nil;
	while(true) {

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

		it["name"] = new_alias;
		it["mem"] = alias_members;
		Sudo::SetUserAlias( 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));
		    RedrawUserAlias( alias_members );
		}
		/* delete users */
	    }else if (ret == "remove_member"){
			string current_item = (string) UI::QueryWidget(`id("user_alias_members"), `CurrentItem);
			alias_members = filter(string s, alias_members, ``(s != current_item));
			users = add(users, current_item);
			RedrawUserAlias(alias_members);
	    /* unknown */
	    } else {
	        y2error("unexpected retcode: %1", ret);
	         continue;
	    }
	}

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

any SaveUserAliases () {
	return `next;
}



}

ACC SHELL 2018