ACC SHELL
{
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