/*
* Copyright (c) 2008-2016 Computer Network Information Center (CNIC), Chinese Academy of Sciences.
*
* This file is part of Duckling project.
*
* Licensed 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.
*
*/
package cn.vlabs.umt.ui;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.BeanFactory;
import cn.vlabs.umt.services.role.RoleService;
import cn.vlabs.umt.services.role.UMTRole;
import cn.vlabs.umt.services.user.bean.LoginInfo;
import cn.vlabs.umt.services.user.bean.User;
public class UMTContext {
private static final Logger LOGGER=Logger.getLogger(UMTContext.class);
public UMTContext(HttpServletRequest request) {
this.request = request;
}
public LoginInfo getLoginInfo() {
LoginInfo info= (LoginInfo) request.getSession().getAttribute(Attributes.LOGIN_INFO);
return killNull(info);
}
public User getCurrentUMTUser() {
return getLoginInfo().getUser();
}
public static boolean isAdminUser(HttpServletRequest request){
return isAdminUser(request.getSession(false));
}
public static boolean isAdminUser(HttpSession session) {
if(session==null){
return false;
}
UMTRole[] roles = (UMTRole[]) session.getAttribute(Attributes.ROLE);
if (roles != null) {
for (UMTRole role : roles) {
if ("admin".equals(role.getName())){
return true;
}
}
}
return false;
}
private static LoginInfo killNull(LoginInfo info){
if(info==null){
info=new LoginInfo();
}
return info;
}
public static LoginInfo getLoginInfo(HttpSession session) {
if (session != null) {
return killNull((LoginInfo) session.getAttribute(Attributes.LOGIN_INFO));
} else {
return killNull(null);
}
}
public static Collection<User> getAdminUsers() {
RoleService rs = (RoleService) factory.getBean("RoleService");
return rs.getRoleMembers("admin");
}
public static void saveUser(HttpSession session, LoginInfo info) {
info=killNull(info);
if(info.getLoginNameInfo()==null||info.getUser()==null){
LOGGER.error("can't set null logininfo to session!");
return;
}
session.setAttribute(Attributes.LOGIN_INFO, info);
}
public Locale getLocale() {
return request.getLocale();
}
public Enumeration<Locale> getLocales() {
return request.getLocales();
}
public String getSiteURL() {
String url = request.getRequestURL().toString();
int index = url.indexOf('/', "http://".length());
if (index != -1) {
url = url.substring(0, index);
}
return url + request.getContextPath();
}
private HttpServletRequest request;
public static BeanFactory getFactory() {
return factory;
}
public static void saveRoles(HttpSession session, UMTRole[] roles) {
session.setAttribute(Attributes.ROLE, roles);
}
public static void setFactory(BeanFactory factory) {
UMTContext.factory = factory;
}
private static BeanFactory factory;
}