From 90ddf5bcf1a4cd719a8d5997a9ed3cafc36f1e04 Mon Sep 17 00:00:00 2001 From: Mrbytes <eguervos@msn.com> Date: Thu, 13 Sep 2012 18:13:20 -0400 Subject: [PATCH] EmptyRepositoryPage_es.html: up-to date with the last changes --- src/com/gitblit/ConfigUserService.java | 129 +++++++++++++++++++++++++++++++++++++++--- 1 files changed, 118 insertions(+), 11 deletions(-) diff --git a/src/com/gitblit/ConfigUserService.java b/src/com/gitblit/ConfigUserService.java index 681efd5..faad691 100644 --- a/src/com/gitblit/ConfigUserService.java +++ b/src/com/gitblit/ConfigUserService.java @@ -60,6 +60,12 @@ private static final String USER = "user"; private static final String PASSWORD = "password"; + + private static final String DISPLAYNAME = "displayName"; + + private static final String EMAILADDRESS = "emailAddress"; + + private static final String COOKIE = "cookie"; private static final String REPOSITORY = "repository"; @@ -82,6 +88,8 @@ private final Map<String, TeamModel> teams = new ConcurrentHashMap<String, TeamModel>(); private volatile long lastModified; + + private volatile boolean forceReload; public ConfigUserService(File realmFile) { this.realmFile = realmFile; @@ -97,6 +105,49 @@ public void setup(IStoredSettings settings) { } + /** + * Does the user service support changes to credentials? + * + * @return true or false + * @since 1.0.0 + */ + @Override + public boolean supportsCredentialChanges() { + return true; + } + + /** + * Does the user service support changes to user display name? + * + * @return true or false + * @since 1.0.0 + */ + @Override + public boolean supportsDisplayNameChanges() { + return true; + } + + /** + * Does the user service support changes to user email address? + * + * @return true or false + * @since 1.0.0 + */ + @Override + public boolean supportsEmailAddressChanges() { + return true; + } + + /** + * Does the user service support changes to team memberships? + * + * @return true or false + * @since 1.0.0 + */ + public boolean supportsTeamMembershipChanges() { + return true; + } + /** * Does the user service support cookie authentication? * @@ -114,11 +165,13 @@ * @return cookie value */ @Override - public char[] getCookie(UserModel model) { + public String getCookie(UserModel model) { + if (!StringUtils.isEmpty(model.cookie)) { + return model.cookie; + } read(); UserModel storedModel = users.get(model.username.toLowerCase()); - String cookie = StringUtils.getSHA1(model.username + storedModel.password); - return cookie.toCharArray(); + return storedModel.cookie; } /** @@ -177,6 +230,15 @@ } /** + * Logout a user. + * + * @param user + */ + @Override + public void logout(UserModel user) { + } + + /** * Retrieve the user object for the specified username. * * @param username @@ -217,9 +279,10 @@ */ @Override public boolean updateUserModel(String username, UserModel model) { + UserModel originalUser = null; try { read(); - UserModel oldUser = users.remove(username.toLowerCase()); + originalUser = users.remove(username.toLowerCase()); users.put(model.username.toLowerCase(), model); // null check on "final" teams because JSON-sourced UserModel // can have a null teams object @@ -239,8 +302,8 @@ } // check for implicit team removal - if (oldUser != null) { - for (TeamModel team : oldUser.teams) { + if (originalUser != null) { + for (TeamModel team : originalUser.teams) { if (!model.isTeamMember(team.name)) { team.removeUser(username); } @@ -250,6 +313,13 @@ write(); return true; } catch (Throwable t) { + if (originalUser != null) { + // restore original user + users.put(originalUser.username.toLowerCase(), originalUser); + } else { + // drop attempted add + users.remove(model.username.toLowerCase()); + } logger.error(MessageFormat.format("Failed to update user model {0}!", model.username), t); } @@ -437,13 +507,21 @@ */ @Override public boolean updateTeamModel(String teamname, TeamModel model) { + TeamModel original = null; try { read(); - teams.remove(teamname.toLowerCase()); + original = teams.remove(teamname.toLowerCase()); teams.put(model.name.toLowerCase(), model); write(); return true; } catch (Throwable t) { + if (original != null) { + // restore original team + teams.put(original.name.toLowerCase(), original); + } else { + // drop attempted add + teams.remove(model.name.toLowerCase()); + } logger.error(MessageFormat.format("Failed to update team model {0}!", model.name), t); } return false; @@ -654,7 +732,18 @@ // write users for (UserModel model : users.values()) { - config.setString(USER, model.username, PASSWORD, model.password); + if (!StringUtils.isEmpty(model.password)) { + config.setString(USER, model.username, PASSWORD, model.password); + } + if (!StringUtils.isEmpty(model.cookie)) { + config.setString(USER, model.username, COOKIE, model.cookie); + } + if (!StringUtils.isEmpty(model.displayName)) { + config.setString(USER, model.username, DISPLAYNAME, model.displayName); + } + if (!StringUtils.isEmpty(model.emailAddress)) { + config.setString(USER, model.username, EMAILADDRESS, model.emailAddress); + } // user roles List<String> roles = new ArrayList<String>(); @@ -663,6 +752,12 @@ } if (model.excludeFromFederation) { roles.add(Constants.NOT_FEDERATED_ROLE); + } + if (roles.size() == 0) { + // we do this to ensure that user record with no password + // is written. otherwise, StoredConfig optimizes that account + // away. :( + roles.add(Constants.NO_ROLE); } config.setStringList(USER, model.username, ROLE, roles); @@ -711,6 +806,9 @@ } config.save(); + // manually set the forceReload flag because not all JVMs support real + // millisecond resolution of lastModified. (issue-55) + forceReload = true; // If the write is successful, delete the current file and rename // the temporary copy to the original filename. @@ -735,7 +833,8 @@ * Reads the realm file and rebuilds the in-memory lookup tables. */ protected synchronized void read() { - if (realmFile.exists() && (realmFile.lastModified() > lastModified)) { + if (realmFile.exists() && (forceReload || (realmFile.lastModified() != lastModified))) { + forceReload = false; lastModified = realmFile.lastModified(); users.clear(); cookies.clear(); @@ -747,7 +846,13 @@ Set<String> usernames = config.getSubsections(USER); for (String username : usernames) { UserModel user = new UserModel(username.toLowerCase()); - user.password = config.getString(USER, username, PASSWORD); + user.password = config.getString(USER, username, PASSWORD); + user.displayName = config.getString(USER, username, DISPLAYNAME); + user.emailAddress = config.getString(USER, username, EMAILADDRESS); + user.cookie = config.getString(USER, username, COOKIE); + if (StringUtils.isEmpty(user.cookie) && !StringUtils.isEmpty(user.password)) { + user.cookie = StringUtils.getSHA1(user.username + user.password); + } // user roles Set<String> roles = new HashSet<String>(Arrays.asList(config.getStringList( @@ -764,7 +869,9 @@ // update cache users.put(user.username, user); - cookies.put(StringUtils.getSHA1(user.username + user.password), user); + if (!StringUtils.isEmpty(user.cookie)) { + cookies.put(user.cookie, user); + } } // load the teams -- Gitblit v1.9.1