Something went wrong on our end
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
RestSecurityHelper.java 5.90 KiB
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.restapi.security;
import java.util.Locale;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.olat.basesecurity.BaseSecurity;
import org.olat.basesecurity.BaseSecurityManager;
import org.olat.basesecurity.Constants;
import org.olat.core.gui.UserRequest;
import org.olat.core.id.Identity;
import org.olat.core.id.OLATResourceable;
import org.olat.core.id.Roles;
import org.olat.core.util.i18n.I18nModule;
import org.olat.course.ICourse;
import org.olat.course.groupsandrights.CourseGroupManager;
import org.olat.course.groupsandrights.CourseRights;
import org.olat.dispatcher.LocaleNegotiator;
/**
*
* Description:<br>
* TODO: srosse Class Description for RestSecurityHelper
*
* <P>
* Initial Date: 7 apr. 2010 <br>
* @author srosse, stephane.rosse@frentix.com
*/
public class RestSecurityHelper {
public static final String SUB_CONTEXT = "/restapi";
public static final String SEC_TOKEN = "X-OLAT-TOKEN";
public static final String SEC_USER_REQUEST = "olat-user-request";
protected static final String SYSTEM_MARKER = UUID.randomUUID().toString();
public static UserRequest getUserRequest(HttpServletRequest request) {
return (UserRequest)request.getAttribute(SEC_USER_REQUEST);
}
public static Identity getIdentity(HttpServletRequest request) {
UserRequest ureq = (UserRequest)request.getAttribute(SEC_USER_REQUEST);
if(ureq == null) return null;
return ureq.getIdentity();
}
public static Identity getIdentity(Long identityKey) {
return BaseSecurityManager.getInstance().loadIdentityByKey(identityKey);
}
public static boolean isUserManager(HttpServletRequest request) {
try {
Roles roles = getRoles(request);
return (roles.isUserManager() || roles.isOLATAdmin());
} catch (Exception e) {
return false;
}
}
public static boolean isGroupManager(HttpServletRequest request) {
try {
Roles roles = getRoles(request);
return (roles.isGroupManager() || roles.isOLATAdmin());
} catch (Exception e) {
return false;
}
}
public static boolean isAuthor(HttpServletRequest request) {
try {
Roles roles = getRoles(request);
return (roles.isAuthor() || roles.isOLATAdmin());
} catch (Exception e) {
return false;
}
}
public static boolean isAuthorEditor(ICourse course, HttpServletRequest request) {
try {
Roles roles = getRoles(request);
if(roles.isOLATAdmin()) return true;
if(roles.isAuthor()) {
UserRequest ureq = getUserRequest(request);
Identity identity = ureq.getIdentity();
CourseGroupManager cgm = course.getCourseEnvironment().getCourseGroupManager();
return cgm.isIdentityCourseAdministrator(identity) || cgm.hasRight(identity, CourseRights.RIGHT_COURSEEDITOR);
}
return false;
} catch (Exception e) {
return false;
}
}
public static boolean isAuthorEditor(OLATResourceable resourceable, HttpServletRequest request) {
try {
Roles roles = getRoles(request);
if(roles.isOLATAdmin()) return true;
if(roles.isAuthor()) {
UserRequest ureq = getUserRequest(request);
Identity identity = ureq.getIdentity();
BaseSecurity secMgr = BaseSecurityManager.getInstance();
return secMgr.isIdentityPermittedOnResourceable(identity, Constants.PERMISSION_ADMIN, resourceable);
}
return false;
} catch (Exception e) {
return false;
}
}
public static boolean isAuthorGrpManager(ICourse course, HttpServletRequest request) {
try {
Roles roles = getRoles(request);
if(roles.isOLATAdmin()) return true;
if(roles.isAuthor()) {
UserRequest ureq = getUserRequest(request);
Identity identity = ureq.getIdentity();
CourseGroupManager cgm = course.getCourseEnvironment().getCourseGroupManager();
boolean editor = cgm.hasRight(identity, CourseRights.RIGHT_GROUPMANAGEMENT);
return editor;
}
return false;
} catch (Exception e) {
return false;
}
}
public static boolean isAdmin(HttpServletRequest request) {
try {
Roles roles = getRoles(request);
return roles.isOLATAdmin();
} catch (Exception e) {
return false;
}
}
public static boolean isAdminOrSystem(HttpServletRequest request) {
try {
Roles roles = getRoles(request);
if(roles.isOLATAdmin()) {
return true;
}
UserRequest ureq = (UserRequest)request.getAttribute(SEC_USER_REQUEST);
if(ureq != null && ureq.getUserSession() != null
&& ureq.getUserSession().getEntry(SYSTEM_MARKER) != null) {
return true;
}
return false;
} catch (Exception e) {
return false;
}
}
public static Roles getRoles(HttpServletRequest request) {
UserRequest ureq= (UserRequest)request.getAttribute(SEC_USER_REQUEST);
if(ureq == null || ureq.getUserSession() == null || ureq.getUserSession().getRoles() == null) {
//guest roles
return new Roles(false, false, false, false, true, false, false);
}
return ureq.getUserSession().getRoles();
}
public static Locale getLocale(HttpServletRequest request) {
if(request == null) return I18nModule.getDefaultLocale();
UserRequest ureq= (UserRequest)request.getAttribute(SEC_USER_REQUEST);
if(ureq == null) return I18nModule.getDefaultLocale();
return LocaleNegotiator.getPreferedLocale(ureq);
}
}