| | |
| | | import com.gitblit.utils.StringUtils;
|
| | |
|
| | | /**
|
| | | * FileUserService is Gitblit's default user service implementation.
|
| | | * FileUserService is Gitblit's original default user service implementation.
|
| | | *
|
| | | * Users and their repository memberships are stored in a simple properties file
|
| | | * which is cached and dynamically reloaded when modified.
|
| | | *
|
| | | * This class was deprecated in Gitblit 0.8.0 in favor of ConfigUserService
|
| | | * which is still a human-readable, editable, plain-text file but it is more
|
| | | * flexible for storing additional fields.
|
| | | * |
| | | * @author James Moger
|
| | | *
|
| | | */
|
| | | @Deprecated
|
| | | public class FileUserService extends FileSettings implements IUserService {
|
| | |
|
| | | private final Logger logger = LoggerFactory.getLogger(FileUserService.class);
|
| | |
| | |
|
| | | public FileUserService(File realmFile) {
|
| | | super(realmFile.getAbsolutePath());
|
| | | }
|
| | |
|
| | | /**
|
| | | * Setup the user service.
|
| | | * |
| | | * @param settings
|
| | | * @since 0.6.1
|
| | | */
|
| | | @Override
|
| | | public void setup(IStoredSettings settings) {
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | UserModel returnedUser = null;
|
| | | UserModel user = getUserModel(username);
|
| | | if (user.password.startsWith(StringUtils.MD5_TYPE)) {
|
| | | // password digest
|
| | | String md5 = StringUtils.MD5_TYPE + StringUtils.getMD5(new String(password));
|
| | | if (user.password.equalsIgnoreCase(md5)) {
|
| | | returnedUser = user;
|
| | | }
|
| | | } else if (user.password.startsWith(StringUtils.COMBINED_MD5_TYPE)) {
|
| | | // username+password digest
|
| | | String md5 = StringUtils.COMBINED_MD5_TYPE
|
| | | + StringUtils.getMD5(username.toLowerCase() + new String(password));
|
| | | if (user.password.equalsIgnoreCase(md5)) {
|
| | | returnedUser = user;
|
| | | }
|
| | | } else if (user.password.equals(new String(password))) {
|
| | | // plain-text password
|
| | | returnedUser = user;
|
| | | }
|
| | | return returnedUser;
|
| | |
| | | // Permissions
|
| | | if (role.equalsIgnoreCase(Constants.ADMIN_ROLE)) {
|
| | | model.canAdmin = true;
|
| | | } else if (role.equalsIgnoreCase(Constants.NOT_FEDERATED_ROLE)) {
|
| | | model.excludeFromFederation = true;
|
| | | }
|
| | | break;
|
| | | default:
|
| | |
| | | // Permissions
|
| | | if (model.canAdmin) {
|
| | | roles.add(Constants.ADMIN_ROLE);
|
| | | }
|
| | | if (model.excludeFromFederation) {
|
| | | roles.add(Constants.NOT_FEDERATED_ROLE);
|
| | | }
|
| | |
|
| | | StringBuilder sb = new StringBuilder();
|
| | |
| | | StringBuilder sb = new StringBuilder();
|
| | | sb.append(password);
|
| | | sb.append(',');
|
| | | List<String> revisedRoles = new ArrayList<String>();
|
| | |
|
| | | // skip first value (password)
|
| | | for (int i = 1; i < values.length; i++) {
|
| | | String value = values[i];
|
| | | if (!value.equalsIgnoreCase(role)) {
|
| | | revisedRoles.add(value);
|
| | | sb.append(value);
|
| | | sb.append(',');
|
| | | }
|
| | |
| | | for (int i = 1; i < roles.length; i++) {
|
| | | String r = roles[i];
|
| | | if (r.equalsIgnoreCase(oldRole)) {
|
| | | needsRenameRole.remove(username);
|
| | | needsRenameRole.add(username);
|
| | | break;
|
| | | }
|
| | | }
|
| | |
| | | StringBuilder sb = new StringBuilder();
|
| | | sb.append(password);
|
| | | sb.append(',');
|
| | | List<String> revisedRoles = new ArrayList<String>();
|
| | | revisedRoles.add(newRole);
|
| | | sb.append(newRole);
|
| | | sb.append(',');
|
| | | |
| | | // skip first value (password)
|
| | | for (int i = 1; i < values.length; i++) {
|
| | | String value = values[i];
|
| | | if (!value.equalsIgnoreCase(oldRole)) {
|
| | | revisedRoles.add(value);
|
| | | sb.append(value);
|
| | | sb.append(',');
|
| | | }
|
| | |
| | | for (int i = 1; i < roles.length; i++) {
|
| | | String r = roles[i];
|
| | | if (r.equalsIgnoreCase(role)) {
|
| | | needsDeleteRole.remove(username);
|
| | | needsDeleteRole.add(username);
|
| | | break;
|
| | | }
|
| | | }
|
| | |
| | | StringBuilder sb = new StringBuilder();
|
| | | sb.append(password);
|
| | | sb.append(',');
|
| | | List<String> revisedRoles = new ArrayList<String>();
|
| | | // skip first value (password)
|
| | | for (int i = 1; i < values.length; i++) {
|
| | | String value = values[i];
|
| | | if (!value.equalsIgnoreCase(role)) {
|
| | | revisedRoles.add(value);
|
| | | sb.append(value);
|
| | | sb.append(',');
|
| | | }
|
| | |
| | | // If the write is successful, delete the current file and rename
|
| | | // the temporary copy to the original filename.
|
| | | if (realmFileCopy.exists() && realmFileCopy.length() > 0) {
|
| | | if (propertiesFile.delete()) {
|
| | | if (!realmFileCopy.renameTo(propertiesFile)) {
|
| | | throw new IOException(MessageFormat.format("Failed to rename {0} to {1}!",
|
| | | realmFileCopy.getAbsolutePath(), propertiesFile.getAbsolutePath()));
|
| | | if (propertiesFile.exists()) {
|
| | | if (!propertiesFile.delete()) {
|
| | | throw new IOException(MessageFormat.format("Failed to delete {0}!",
|
| | | propertiesFile.getAbsolutePath()));
|
| | | }
|
| | | } else {
|
| | | throw new IOException(MessageFormat.format("Failed to delete (0)!",
|
| | | propertiesFile.getAbsolutePath()));
|
| | | }
|
| | | if (!realmFileCopy.renameTo(propertiesFile)) {
|
| | | throw new IOException(MessageFormat.format("Failed to rename {0} to {1}!",
|
| | | realmFileCopy.getAbsolutePath(), propertiesFile.getAbsolutePath()));
|
| | | }
|
| | | } else {
|
| | | throw new IOException(MessageFormat.format("Failed to save {0}!",
|
| | |
| | | }
|
| | | return allUsers;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String toString() {
|
| | | return getClass().getSimpleName() + "(" + propertiesFile.getAbsolutePath() + ")";
|
| | | }
|
| | | }
|