// Copyright 2012 Citrix Systems, Inc. Licensed under the // Apache License, Version 2.0 (the "License"); you may not use this // file except in compliance with the License. Citrix Systems, Inc. // reserves all rights not expressly granted by 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. // // Automatically generated by addcopyright.py at 04/03/2012 package com.cloud.user; import com.cloud.server.ManagementService; import com.cloud.utils.component.ComponentLocator; public class UserContext { private static ThreadLocal<UserContext> s_currentContext = new ThreadLocal<UserContext>(); private static final ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); private static final AccountService _accountMgr = locator.getManager(AccountService.class); private long userId; private String sessionId; private Account account; private long startEventId = 0; private long accountId; private String eventDetails; private boolean apiServer; private static UserContext s_adminContext = new UserContext(_accountMgr.getSystemUser().getId(), _accountMgr.getSystemAccount(), null, false); public UserContext() { } public UserContext(long userId, Account accountObject, String sessionId, boolean apiServer) { this.userId = userId; this.account = accountObject; this.sessionId = sessionId; this.apiServer = apiServer; } public long getCallerUserId() { return userId; } public void setCallerUserId(long userId) { this.userId = userId; } public String getSessionId() { return sessionId; } public Account getCaller() { return account; } public void setCaller(Account accountObject) { this.account = accountObject; } public void setSessionKey(String sessionId) { this.sessionId = sessionId; } public boolean isApiServer() { return apiServer; } public void setApiServer(boolean apiServer) { this.apiServer = apiServer; } public static UserContext current() { UserContext context = s_currentContext.get(); if (context == null) { // // TODO: we should enforce explicit UserContext setup at major entry-points for security concerns, // however, there are many places that run background jobs assume the system context. // // If there is a security concern, all entry points from user (including the front end that takes HTTP // request in and // the core async-job manager that runs commands from user) have explicitly setup the UserContext. // return s_adminContext; } return context; } public static void updateContext(long userId, Account accountObject, String sessionId) { UserContext context = current(); assert (context != null) : "Context should be already setup before you can call this one"; context.setCallerUserId(userId); context.setCaller(accountObject); context.setSessionKey(sessionId); } public static void registerContext(long userId, Account accountObject, String sessionId, boolean apiServer) { s_currentContext.set(new UserContext(userId, accountObject, sessionId, apiServer)); } public static void unregisterContext() { s_currentContext.set(null); } public void setStartEventId(long startEventId) { this.startEventId = startEventId; } public long getStartEventId() { return startEventId; } public long getAccountId() { return accountId; } public void setAccountId(long accountId) { this.accountId = accountId; } public void setEventDetails(String eventDetails) { this.eventDetails = eventDetails; } public String getEventDetails() { return eventDetails; } }