blob: aaf2f0feb6505cc325553bdbfed2cbc7e31b4290 [file] [log] [blame]
<%
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var privilegesInfo = sling.getService(Packages.org.apache.sling.jackrabbit.usermanager.AuthorizablePrivilegesInfo);
var authorizable = resource.adaptTo(Packages.org.apache.jackrabbit.api.security.user.Authorizable);
var canEdit = privilegesInfo.canUpdateProperties(currentSession, authorizable.getID());
var canRemove = privilegesInfo.canRemove(currentSession, authorizable.getID());
var canUpdateMembers = privilegesInfo.canUpdateGroupMembers(currentSession, authorizable.getID());
var valueMap = resource.adaptTo(Packages.org.apache.sling.api.resource.ValueMap);
var rb = request.getResourceBundle("org.apache.sling.usermgr.Resources", null);
var propNameSet = new Packages.java.util.TreeSet(valueMap.keySet());
propNameSet.remove("declaredMemberOf");
propNameSet.remove("memberOf");
var propKeysCsv = rb.getString("csv.static.user.prop.keys");
var items = [];
if (propKeysCsv != null && propKeysCsv.length() > 0 && !propKeysCsv.equals("csv.static.user.prop.keys")) {
items = propKeysCsv.split(",");
}
for (var i=0; i < items.length; i++) {
propNameSet.add(items[i]);
}
function propLabel(propName) {
var key = "prop.label." + propName;
var value = rb.getString(key);
if (value == key) {
return propName;
}
return value;
};
function format(key, args) {
var value = rb.getString(key);
return Packages.java.text.MessageFormat.format(value, args);
}
function displayName(path) {
var res = request.getResourceResolver().resolve(path);
var resValueMap = res.adaptTo(Packages.org.apache.sling.api.resource.ValueMap);
var value = resValueMap.get("displayName");
if (value == null) {
value = path.substring(path.lastIndexOf('/') + 1)
}
return value;
}
var isAdmin = false;
if ("admin".equals(request.getRemoteUser())) {
isAdmin = true;
} else {
//if the current user is a member of the UserAdmin group, then allow changing the password of other users.
var currentUserRes = request.getResourceResolver().resolve("/system/userManager/user/" + request.getRemoteUser());
var currentUserAuthorizable = currentUserRes.adaptTo(Packages.org.apache.jackrabbit.api.security.user.Authorizable);
var userAdminRes = request.getResourceResolver().resolve("/system/userManager/group/UserAdmin");
var group = userAdminRes.adaptTo(Packages.org.apache.jackrabbit.api.security.user.Group);
if (group) {
isAdmin = group.isMember(currentUserAuthorizable);
}
}
%>
<div class="ui-widget ui-widget-content ui-corner-all usermgmt-body" id="update-user-body" >
<h3 class="ui-widget-header ui-corner-all usermgmt-header"><%=format(canEdit ? "header.update.user" : "header.view.user", authorizable.getID())%></h3>
<div class="info-msg-block" style="display:none;">
<div class="ui-state-highlight ui-corner-all">
<p>
<span class="ui-icon ui-icon-info"></span>
<span class="info-msg-text"></span>
</p>
</div>
</div>
<form id="update-user-form" accept-charset="UTF-8"
action="<%=request.contextPath%><%=resource.path %>.update.html"
method="post" >
<fieldset>
<input type="hidden" value="UTF-8" name="_charset_" />
<input id="redirect" type="hidden" name=":redirect" value="<%=request.contextPath%><%=resource.path %>.html" />
<%-- Enabled/Disabled Status --%>
<% if (isAdmin) { %>
<div class="prop-line ui-helper-clearfix">
<label><%=propLabel("loginEnabled")%>:</label>
<span id="loginStatusInput">
<label for="enabled"><input id="enabled" type="radio" name=":disabled" value='false' <%=authorizable.isDisabled() ? "" : "checked='checked'" %>/> <%=propLabel("loginEnabled.yes")%></label>
<label for="disabled"><input id="disabled" type="radio" name=":disabled" value='true' <%=authorizable.isDisabled() ? "checked='checked'" : "" %>/> <%=propLabel("loginEnabled.no")%></label>
</span>
<span id="disabledReasonPanel" style="display:none">
<label for="disabledReason"><%=propLabel("loginDisabled.reason")%>:</label>
<input id="disabledReason>" type="text" name=":disabledReason" value='<%=authorizable.getDisabledReason()== null ? "" : authorizable.getDisabledReason()%>'/>
</span>
</div>
<% } /*endif(isAdmin) */ %>
<%-- Member Of --%>
<% var key = "memberOf";
var value = valueMap.get(key);
%>
<div class="prop-line ui-helper-clearfix">
<label for="<%=key%>"><%=propLabel(key)%>:</label>
<ol id="<%=key%>">
<li id="<%=key%>__empty" <%= value.length == 0 ? "" : "style='display:none'" %>><%=rb.getString("memberOf.empty")%></li>
<%
for (i = 0; i < value.length; i++) {
var group = value[i];
%>
<li>
<a href="<%=request.contextPath%><%=group%>.html"><%=displayName(group)%></a>
</li>
<%
}/* endfor */
%>
</ol>
</div>
<%
var it = propNameSet.iterator();
while (it.hasNext()) {
key = it.next();
value = valueMap.get(key);
if (value == null) {
value = "";
}
%>
<div class="prop-line ui-helper-clearfix">
<label for="<%=key%>"><%=propLabel(key)%>:</label>
<input id="<%=key%>" type="text" name="<%=key%>" value='<%=value%>' <%= canEdit ? "" : "disabled=\"disabled\" readonly=\"readonly\" class=\"disabled\""%>/>
<% if (canEdit) { %>
<a href='#' class="noscript-hide remove-property" title='<%=rb.getString("tooltip.removeProperty")%>'><span class="ui-icon ui-icon-circle-close"></span></a>
<% } /* endif(canEdit) */ %>
</div>
<%
} /* endwhile */
%>
<div id="updateSubmitBtns" class="ui-helper-clearfix">
<label>&#160;</label>
<% if (canEdit) { %><button accesskey="u" id="updateUserBtn" type="submit"><%=rb.getString("button.save")%></button><% } %>
<span class="noscript-hide">
<% if (canRemove) { %><a href="#" id="removeUserLink"><%=rb.getString("link.remove")%></a> | <% } %>
<% if (canEdit) { %><a href="#" id="add_property"><%=rb.getString("link.add.property")%></a><% } %>
</span>
</div>
</fieldset>
</form>
</div>
<% if (canEdit) { %>
<div id="add-property-dialog" title="<%=rb.getString("dialog.title.add.property")%>" style="display:none">
<form id='add-property-form' action="#">
<fieldset>
<label for="newPropName"><%=rb.getString("label.property.name")%></label>
<input type="text" name="name" id="newPropName" />
</fieldset>
</form>
</div>
<% } /*endif(canEdit) */ %>
<% if (canRemove) { %>
<div id="remove-user-dialog" title='<%=rb.getString("dialog.title.confirm.remove")%>' style="display:none">
<form id='remove-user-form' action="<%=request.contextPath%><%=resource.path%>.delete.html" method="post">
<fieldset>
<input type="hidden" name=":redirect" value="<%=request.contextPath%>/system/userManager/user.html" />
<p>
<%=rb.getString("msg.user.confirm.remove") %>
</p>
</fieldset>
</form>
</div>
<% } /*endif(canRemove) */ %>
<%
var canChangePwd = false;
if (canEdit) {
var isMe = authorizable.getID().equals(request.getRemoteUser());
if (isMe || isAdmin) {
//a user can always change their own password
canChangePwd = true;
}
}
if (canChangePwd) { %>
<div class="ui-widget ui-widget-content ui-corner-all usermgmt-body" id="update-password-body" >
<h3 class="ui-widget-header ui-corner-all usermgmt-header"><%=rb.getString("header.change.password")%></h3>
<div class="info-msg-block" style="display:none;">
<div class="ui-state-highlight ui-corner-all">
<p>
<span class="ui-icon ui-icon-info"></span>
<span class="info-msg-text"></span>
</p>
</div>
</div>
<form id="update-password-form" accept-charset="UTF-8"
action="<%=request.contextPath%><%=resource.path %>.changePassword.html"
method="post">
<fieldset>
<input type="hidden" value="UTF-8" name="_charset_" />
<input id="pwdRedirect" type="hidden" name=":redirect" value="<%=request.contextPath%><%=resource.path %>.html" />
<% if (isMe) { %>
<div class="prop-line ui-helper-clearfix">
<label for="oldPwd" accesskey="o"><%=propLabel("oldPwd")%>:</label>
<input id="oldPwd" type="password" name="oldPwd" value=''/>
</div>
<% } %>
<div class="prop-line ui-helper-clearfix">
<label for="newPwd" accesskey="p"><%=propLabel("newPwd")%>:</label>
<input id="newPwd" type="password" name="newPwd" value=''/>
</div>
<div class="prop-line ui-helper-clearfix">
<label for="newPwdConfirm" accesskey="c"><%=propLabel("newPwdConfirm")%>:</label>
<input id="newPwdConfirm" type="password" name="newPwdConfirm" value=''/>
</div>
<div class="ui-helper-clearfix">
<label>&#160;</label>
<button accesskey="d" id="updatePasswordBtn" type="submit"><%=rb.getString("button.updatePwd")%></button>
</div>
</fieldset>
</form>
</div>
<% } /*endif (canChangePwd)*/ %>