From b325021c4e3168ef77bf3eb28be1d4c834595de8 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 27 Sep 2013 21:33:26 -0400
Subject: [PATCH] Change default access restriction to PUSH
---
src/main/java/com/gitblit/ConfigUserService.java | 68 +++++++++++++++++++++++++--------
1 files changed, 51 insertions(+), 17 deletions(-)
diff --git a/src/main/java/com/gitblit/ConfigUserService.java b/src/main/java/com/gitblit/ConfigUserService.java
index 7aa0998..44687b4 100644
--- a/src/main/java/com/gitblit/ConfigUserService.java
+++ b/src/main/java/com/gitblit/ConfigUserService.java
@@ -37,6 +37,7 @@
import com.gitblit.Constants.AccessPermission;
import com.gitblit.models.TeamModel;
import com.gitblit.models.UserModel;
+import com.gitblit.models.UserRepositoryPreferences;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.DeepCopier;
import com.gitblit.utils.StringUtils;
@@ -88,6 +89,10 @@
private static final String PRERECEIVE = "preReceiveScript";
private static final String POSTRECEIVE = "postReceiveScript";
+
+ private static final String STARRED = "starred";
+
+ private static final String LOCALE = "locale";
private final File realmFile;
@@ -181,8 +186,10 @@
if (!StringUtils.isEmpty(model.cookie)) {
return model.cookie;
}
- read();
- UserModel storedModel = users.get(model.username.toLowerCase());
+ UserModel storedModel = getUserModel(model.username);
+ if (storedModel == null) {
+ return null;
+ }
return storedModel.cookie;
}
@@ -193,7 +200,7 @@
* @return a user object or null
*/
@Override
- public UserModel authenticate(char[] cookie) {
+ public synchronized UserModel authenticate(char[] cookie) {
String hash = new String(cookie);
if (StringUtils.isEmpty(hash)) {
return null;
@@ -202,6 +209,12 @@
UserModel model = null;
if (cookies.containsKey(hash)) {
model = cookies.get(hash);
+ }
+
+ if (model != null) {
+ // clone the model, otherwise all changes to this object are
+ // live and unpersisted
+ model = DeepCopier.copy(model);
}
return model;
}
@@ -215,7 +228,6 @@
*/
@Override
public UserModel authenticate(String username, char[] password) {
- read();
UserModel returnedUser = null;
UserModel user = getUserModel(username);
if (user == null) {
@@ -257,7 +269,7 @@
* @return a user object or null
*/
@Override
- public UserModel getUserModel(String username) {
+ public synchronized UserModel getUserModel(String username) {
read();
UserModel model = users.get(username.toLowerCase());
if (model != null) {
@@ -287,7 +299,7 @@
* @since 1.2.0
*/
@Override
- public boolean updateUserModels(Collection<UserModel> models) {
+ public synchronized boolean updateUserModels(Collection<UserModel> models) {
try {
read();
for (UserModel model : models) {
@@ -339,7 +351,7 @@
* @return true if update is successful
*/
@Override
- public boolean updateUserModel(String username, UserModel model) {
+ public synchronized boolean updateUserModel(String username, UserModel model) {
UserModel originalUser = null;
try {
read();
@@ -405,7 +417,7 @@
* @return true if successful
*/
@Override
- public boolean deleteUser(String username) {
+ public synchronized boolean deleteUser(String username) {
try {
// Read realm file
read();
@@ -455,7 +467,7 @@
* @since 0.8.0
*/
@Override
- public List<TeamModel> getAllTeams() {
+ public synchronized List<TeamModel> getAllTeams() {
read();
List<TeamModel> list = new ArrayList<TeamModel>(teams.values());
list = DeepCopier.copy(list);
@@ -472,7 +484,7 @@
* @return list of all usernames that can bypass the access restriction
*/
@Override
- public List<String> getTeamnamesForRepositoryRole(String role) {
+ public synchronized List<String> getTeamnamesForRepositoryRole(String role) {
List<String> list = new ArrayList<String>();
try {
read();
@@ -499,7 +511,7 @@
* @return true if successful
*/
@Override
- public boolean setTeamnamesForRepositoryRole(String role, List<String> teamnames) {
+ public synchronized boolean setTeamnamesForRepositoryRole(String role, List<String> teamnames) {
try {
Set<String> specifiedTeams = new HashSet<String>();
for (String teamname : teamnames) {
@@ -536,7 +548,7 @@
* @since 0.8.0
*/
@Override
- public TeamModel getTeamModel(String teamname) {
+ public synchronized TeamModel getTeamModel(String teamname) {
read();
TeamModel model = teams.get(teamname.toLowerCase());
if (model != null) {
@@ -666,7 +678,7 @@
* @return list of all usernames
*/
@Override
- public List<UserModel> getAllUsers() {
+ public synchronized List<UserModel> getAllUsers() {
read();
List<UserModel> list = new ArrayList<UserModel>(users.values());
list = DeepCopier.copy(list);
@@ -683,7 +695,7 @@
* @return list of all usernames that can bypass the access restriction
*/
@Override
- public List<String> getUsernamesForRepositoryRole(String role) {
+ public synchronized List<String> getUsernamesForRepositoryRole(String role) {
List<String> list = new ArrayList<String>();
try {
read();
@@ -711,7 +723,7 @@
*/
@Override
@Deprecated
- public boolean setUsernamesForRepositoryRole(String role, List<String> usernames) {
+ public synchronized boolean setUsernamesForRepositoryRole(String role, List<String> usernames) {
try {
Set<String> specifiedUsers = new HashSet<String>();
for (String username : usernames) {
@@ -748,7 +760,7 @@
* @return true if successful
*/
@Override
- public boolean renameRepositoryRole(String oldRole, String newRole) {
+ public synchronized boolean renameRepositoryRole(String oldRole, String newRole) {
try {
read();
// identify users which require role rename
@@ -783,7 +795,7 @@
* @return true if successful
*/
@Override
- public boolean deleteRepositoryRole(String role) {
+ public synchronized boolean deleteRepositoryRole(String role) {
try {
read();
@@ -846,6 +858,11 @@
if (!StringUtils.isEmpty(model.countryCode)) {
config.setString(USER, model.username, COUNTRYCODE, model.countryCode);
}
+ if (model.getPreferences() != null) {
+ if (!StringUtils.isEmpty(model.getPreferences().locale)) {
+ config.setString(USER, model.username, LOCALE, model.getPreferences().locale);
+ }
+ }
// user roles
List<String> roles = new ArrayList<String>();
@@ -878,6 +895,14 @@
}
}
config.setStringList(USER, model.username, REPOSITORY, permissions);
+ }
+
+ // user preferences
+ if (model.getPreferences() != null) {
+ List<String> starred = model.getPreferences().getStarredRepositories();
+ if (starred.size() > 0) {
+ config.setStringList(USER, model.username, STARRED, starred);
+ }
}
}
@@ -999,6 +1024,7 @@
user.stateProvince = config.getString(USER, username, STATEPROVINCE);
user.countryCode = config.getString(USER, username, COUNTRYCODE);
user.cookie = config.getString(USER, username, COOKIE);
+ user.getPreferences().locale = config.getString(USER, username, LOCALE);
if (StringUtils.isEmpty(user.cookie) && !StringUtils.isEmpty(user.password)) {
user.cookie = StringUtils.getSHA1(user.username + user.password);
}
@@ -1021,6 +1047,14 @@
}
}
+ // starred repositories
+ Set<String> starred = new HashSet<String>(Arrays.asList(config
+ .getStringList(USER, username, STARRED)));
+ for (String repository : starred) {
+ UserRepositoryPreferences prefs = user.getPreferences().getRepositoryPreferences(repository);
+ prefs.starred = true;
+ }
+
// update cache
users.put(user.username, user);
if (!StringUtils.isEmpty(user.cookie)) {
--
Gitblit v1.9.1