001/* 002 * (C) Copyright 2006-2012 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Thomas Roger <troger@nuxeo.com> 018 */ 019 020package org.nuxeo.ecm.core.api; 021 022import java.util.ArrayList; 023import java.util.Arrays; 024import java.util.Collections; 025import java.util.List; 026 027import org.nuxeo.ecm.core.api.security.SecurityConstants; 028import org.nuxeo.runtime.api.login.LoginComponent; 029 030/** 031 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> 032 */ 033public class SystemPrincipal implements NuxeoPrincipal { 034 035 private static final long serialVersionUID = -3381784063138281706L; 036 037 private static final char[] SYS_PASSWORD = null; 038 039 private static final List<String> SYS_GROUPS = Collections.unmodifiableList(Arrays.asList(SecurityConstants.ADMINISTRATORS)); 040 041 private static final List<String> SYS_ROLES = Collections.unmodifiableList(new ArrayList<String>()); 042 043 private String origUserName; 044 045 private int hash; 046 047 public SystemPrincipal(String origUserName) { 048 this.origUserName = origUserName == null ? LoginComponent.SYSTEM_USERNAME : origUserName; 049 computeHash(); 050 } 051 052 private void computeHash() { 053 if (origUserName != null) { 054 hash = (LoginComponent.SYSTEM_USERNAME + "-" + origUserName).hashCode(); 055 } else { 056 hash = LoginComponent.SYSTEM_USERNAME.hashCode(); 057 } 058 } 059 060 @Override 061 public boolean equals(Object other) { 062 if (other instanceof SystemPrincipal) { 063 if (origUserName == null) { 064 return ((SystemPrincipal) other).origUserName == null; 065 } else { 066 return origUserName.equals(((SystemPrincipal) other).origUserName); 067 } 068 } else { 069 return false; 070 } 071 } 072 073 @Override 074 public int hashCode() { 075 return hash; 076 } 077 078 @Override 079 public String getCompany() { 080 return "Nuxeo"; 081 } 082 083 @Override 084 public String getEmail() { 085 return null; 086 } 087 088 @Override 089 public void setEmail(String email) { 090 091 } 092 093 @Override 094 public String getFirstName() { 095 return "System"; 096 } 097 098 @Override 099 public String getLastName() { 100 return "System"; 101 } 102 103 @Override 104 public String getName() { 105 return LoginComponent.SYSTEM_USERNAME; 106 } 107 108 @Override 109 public List<String> getGroups() { 110 return SYS_GROUPS; 111 } 112 113 @Override 114 public List<String> getAllGroups() { 115 return SYS_GROUPS; 116 } 117 118 @Override 119 public List<String> getRoles() { 120 return SYS_ROLES; 121 } 122 123 @Override 124 public String getPassword() { 125 if (SYS_PASSWORD == null) { 126 return null; 127 } 128 return new String(SYS_PASSWORD); 129 } 130 131 @Override 132 public String getPrincipalId() { 133 return ""; 134 } 135 136 @Override 137 public String getOriginatingUser() { 138 return origUserName; 139 } 140 141 @Override 142 public void setOriginatingUser(String originatingUser) { 143 origUserName = originatingUser; 144 computeHash(); 145 } 146 147 @Override 148 public String getActingUser() { 149 return getOriginatingUser() == null ? getName() : getOriginatingUser(); 150 } 151 152 @Override 153 public DocumentModel getModel() { 154 return null; 155 } 156 157 @Override 158 public void setCompany(String company) { 159 } 160 161 @Override 162 public void setFirstName(String firstName) { 163 } 164 165 @Override 166 public void setLastName(String lastName) { 167 } 168 169 @Override 170 public void setName(String userName) { 171 } 172 173 @Override 174 public void setGroups(List<String> groups) { 175 } 176 177 @Override 178 public void setRoles(List<String> roles) { 179 } 180 181 @Override 182 public void setPassword(String password) { 183 } 184 185 @Override 186 public void setPrincipalId(String principalId) { 187 } 188 189 @Override 190 public void setModel(DocumentModel model) { 191 } 192 193 @Override 194 public boolean isMemberOf(String group) { 195 return SYS_GROUPS.contains(group); 196 } 197 198 @Override 199 public String toString() { 200 return getName(); 201 } 202 203 @Override 204 public boolean isAdministrator() { 205 return true; 206 } 207 208 @Override 209 public String getTenantId() { 210 return null; 211 } 212 213 @Override 214 public boolean isAnonymous() { 215 return false; 216 } 217 218 @Override 219 public boolean isTransient() { 220 return false; 221 } 222}