/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.vfs.server;
import org.eclipse.che.api.vfs.shared.dto.VirtualFileSystemInfo;
import org.eclipse.che.commons.env.EnvironmentContext;
import org.eclipse.che.commons.user.User;
import java.util.*;
/**
* Gives access to the current user context, e.g. uses HttpServletRequest to get info about Principal.
*
* @author andrew00x
*/
public abstract class VirtualFileSystemUserContext {
protected VirtualFileSystemUserContext() {
}
/** Get current user. */
public abstract VirtualFileSystemUser getVirtualFileSystemUser();
// TODO: Temporary solution, need improve it.
public static VirtualFileSystemUserContext newInstance() {
return new DefaultVirtualFileSystemUserContext();
}
private static class DefaultVirtualFileSystemUserContext extends VirtualFileSystemUserContext {
public VirtualFileSystemUser getVirtualFileSystemUser() {
final EnvironmentContext context = EnvironmentContext.getCurrent();
final User user = context.getUser();
if (user == null) {
return new VirtualFileSystemUser(VirtualFileSystemInfo.ANONYMOUS_PRINCIPAL, Collections.<String>emptySet());
}
final Set<String> groups = new HashSet<>(2);
if (user.isMemberOf("workspace/developer")) {
groups.add("workspace/developer");
}
if (user.isMemberOf("system/admin")) {
groups.add("workspace/developer");
}
if (user.isMemberOf("workspace/admin")) {
groups.add("workspace/admin");
}
return new VirtualFileSystemUser(user.getId(), groups);
}
}
}