001/* 002 * (C) Copyright 2006-2019 Nuxeo (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 * Nuxeo - initial API and implementation 018 */ 019package org.nuxeo.ecm.core.api.impl; 020 021import static java.util.Objects.requireNonNullElseGet; 022 023import java.io.Serializable; 024import java.util.Collections; 025import java.util.List; 026 027import org.apache.commons.lang3.builder.EqualsBuilder; 028import org.apache.commons.lang3.builder.HashCodeBuilder; 029import org.apache.commons.lang3.builder.ToStringBuilder; 030import org.nuxeo.ecm.core.api.DocumentModel; 031import org.nuxeo.ecm.core.api.NuxeoPrincipal; 032 033/** 034 * NuxeoPrincipal stub implementation. 035 * 036 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> 037 */ 038public class UserPrincipal implements NuxeoPrincipal, Serializable { 039 040 private static final long serialVersionUID = 2013321088068583749L; 041 042 protected boolean anonymous; 043 044 protected boolean administrator; 045 046 protected String userName; 047 048 protected List<String> groups; 049 050 protected List<String> roles; 051 052 protected String firstName; 053 054 protected String lastName; 055 056 protected String email; 057 058 protected String company; 059 060 protected transient String password; 061 062 protected DocumentModel model; 063 064 protected String originatingUser; 065 066 public UserPrincipal(String username, List<String> groups, boolean anonymous, boolean administrator) { 067 userName = username; 068 this.groups = requireNonNullElseGet(groups, Collections::emptyList); 069 this.anonymous = anonymous; 070 this.administrator = administrator; 071 } 072 073 @Override 074 public String getEmail() { 075 return email; 076 } 077 078 @Override 079 public void setEmail(String email) { 080 this.email = email; 081 } 082 083 @Override 084 public String getCompany() { 085 return company; 086 } 087 088 @Override 089 public String getFirstName() { 090 return firstName; 091 } 092 093 @Override 094 public String getLastName() { 095 return lastName; 096 } 097 098 @Override 099 public void setCompany(String company) { 100 this.company = company; 101 } 102 103 @Override 104 public void setFirstName(String firstName) { 105 this.firstName = firstName; 106 } 107 108 @Override 109 public void setLastName(String lastName) { 110 this.lastName = lastName; 111 } 112 113 @Override 114 public void setName(String name) { 115 userName = name; 116 } 117 118 @Override 119 public String getName() { 120 return userName; 121 } 122 123 @Override 124 public List<String> getGroups() { 125 return groups; 126 } 127 128 // TODO OG: this is not the true semantics but is it really a problem here? 129 @Override 130 public List<String> getAllGroups() { 131 return groups; 132 } 133 134 @Override 135 public List<String> getRoles() { 136 return roles; 137 } 138 139 @Override 140 public void setGroups(List<String> groups) { 141 this.groups = groups; 142 } 143 144 @Override 145 public void setRoles(List<String> roles) { 146 this.roles = roles; 147 } 148 149 @Override 150 public String getPassword() { 151 return password; 152 } 153 154 @Override 155 public void setPassword(String password) { 156 this.password = password; 157 } 158 159 @Override 160 public String getPrincipalId() { 161 return null; 162 } 163 164 @Override 165 public void setPrincipalId(String principalId) { 166 } 167 168 @Override 169 public DocumentModel getModel() { 170 return model; 171 } 172 173 @Override 174 public void setModel(DocumentModel model) { 175 this.model = model; 176 } 177 178 @Override 179 public boolean isMemberOf(String group) { 180 return groups.contains(group); 181 } 182 183 @Override 184 public boolean isAdministrator() { 185 return administrator; 186 } 187 188 @Override 189 public String getTenantId() { 190 return null; 191 } 192 193 @Override 194 public boolean isAnonymous() { 195 return anonymous; 196 } 197 198 @Override 199 public String getOriginatingUser() { 200 return originatingUser; 201 } 202 203 @Override 204 public void setOriginatingUser(String originatingUser) { 205 this.originatingUser = originatingUser; 206 } 207 208 @Override 209 public String getActingUser() { 210 return getOriginatingUser() == null ? getName() : getOriginatingUser(); 211 } 212 213 @Override 214 public boolean isTransient() { 215 String name = getName(); 216 return name != null && name.startsWith(TRANSIENT_USER_PREFIX); 217 } 218 219 @Override 220 public int hashCode() { 221 return new HashCodeBuilder().append(userName) 222 .append(groups) 223 .append(roles) 224 .append(firstName) 225 .append(lastName) 226 .append(company) 227 .append(password) 228 .toHashCode(); 229 } 230 231 @Override 232 public boolean equals(Object o) { 233 if (this == o) { 234 return true; 235 } 236 if (!(o instanceof UserPrincipal)) { 237 return false; 238 } 239 240 UserPrincipal that = (UserPrincipal) o; 241 return new EqualsBuilder().append(userName, that.userName) 242 .append(groups, that.groups) 243 .append(roles, that.roles) 244 .append(firstName, that.firstName) 245 .append(lastName, that.lastName) 246 .append(company, that.company) 247 .append(password, that.password) 248 .isEquals(); 249 } 250 251 @Override 252 public String toString() { 253 return ToStringBuilder.reflectionToString(this); 254 } 255}