Skip to content

Commit 5c5a382

Browse files
committed
Merge branch 'stable-2.15'
* stable-2.15: Eliminate usage of ProjectControl GerritToGitBlitUserModel#canAccess: Restore return statement Change-Id: If6466a9cd0ee7f13ddb7438391805b63a3500351
2 parents 0ebcef8 + d564d9c commit 5c5a382

File tree

2 files changed

+37
-85
lines changed

2 files changed

+37
-85
lines changed

src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java

Lines changed: 32 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,12 @@
2020
import com.gitblit.models.TeamModel;
2121
import com.gitblit.models.UserModel;
2222
import com.gitblit.utils.StringUtils;
23-
import com.google.gerrit.extensions.client.ProjectState;
2423
import com.google.gerrit.reviewdb.client.Project.NameKey;
2524
import com.google.gerrit.server.CurrentUser;
2625
import com.google.gerrit.server.permissions.PermissionBackend;
26+
import com.google.gerrit.server.permissions.PermissionBackend.ForProject;
2727
import com.google.gerrit.server.permissions.ProjectPermission;
28-
import com.google.gerrit.server.project.NoSuchProjectException;
29-
import com.google.gerrit.server.project.ProjectControl;
30-
import com.google.gerrit.server.project.ProjectControl.Factory;
28+
import com.google.gerrit.server.permissions.RefPermission;
3129
import com.google.inject.Provider;
3230
import java.util.HashSet;
3331
import java.util.Set;
@@ -49,109 +47,67 @@ public class GerritToGitBlitUserModel extends UserModel {
4947
public final Set<String> repositories = new HashSet<String>();
5048
public final Set<TeamModel> teams = new HashSet<TeamModel>();
5149

52-
private final transient ProjectControl.Factory projectControlFactory;
5350
private final transient Provider<CurrentUser> userProvider;
5451
private final transient PermissionBackend permissionBackend;
5552

5653
// non-persisted fields
5754
public boolean isAuthenticated;
5855

5956
public GerritToGitBlitUserModel(String username) {
60-
this(username, null, null, null);
57+
this(username, null, null);
6158
}
6259

6360
public GerritToGitBlitUserModel(
64-
String username,
65-
ProjectControl.Factory projectControlFactory,
66-
Provider<CurrentUser> userProvider,
67-
PermissionBackend persmissionBackend) {
61+
String username, Provider<CurrentUser> userProvider, PermissionBackend permissionBackend) {
6862
super(username);
6963
this.username = username;
7064
this.isAuthenticated = true;
71-
this.projectControlFactory = projectControlFactory;
7265
this.userProvider = userProvider;
73-
this.permissionBackend = persmissionBackend;
66+
this.permissionBackend = permissionBackend;
7467
}
7568

76-
public GerritToGitBlitUserModel(ProjectControl.Factory projectControlFactory) {
69+
public GerritToGitBlitUserModel() {
7770
super(ANONYMOUS_USER);
78-
this.projectControlFactory = projectControlFactory;
7971
this.userProvider = null;
8072
this.permissionBackend = null;
8173
}
8274

83-
@Deprecated
84-
public boolean canAccessRepository(String repositoryName) {
85-
boolean result = false;
86-
87-
try {
88-
ProjectControl control = projectControlFactory.controlFor(new NameKey(repositoryName));
89-
result = control != null;
90-
} catch (NoSuchProjectException e) {
91-
result = false;
92-
}
93-
94-
return result;
75+
@Override
76+
public boolean canView(RepositoryModel repository, String ref) {
77+
return permissionBackend
78+
.user(userProvider)
79+
.project(new NameKey(StringUtils.stripDotGit(repository.name)))
80+
.ref(ref)
81+
.testOrFalse(RefPermission.READ);
9582
}
9683

9784
@Override
9885
protected boolean canAccess(
9986
RepositoryModel repository,
10087
AccessRestrictionType ifRestriction,
10188
AccessPermission requirePermission) {
102-
boolean result = false;
103-
104-
try {
105-
NameKey project = new NameKey(getRepositoryName(repository.name));
106-
ProjectControl control = projectControlFactory.controlFor(project);
107-
108-
if (control == null) {
109-
return false;
110-
}
111-
112-
switch (ifRestriction) {
113-
case VIEW:
114-
return !control.getProject().getState().equals(ProjectState.HIDDEN);
115-
case CLONE:
116-
return permissionBackend
117-
.user(userProvider)
118-
.project(project)
119-
.testOrFalse(ProjectPermission.RUN_UPLOAD_PACK);
120-
case PUSH:
121-
permissionBackend
122-
.user(userProvider)
123-
.project(project)
124-
.testOrFalse(ProjectPermission.RUN_RECEIVE_PACK);
125-
default:
126-
return true;
127-
}
128-
} catch (NoSuchProjectException e) {
129-
result = false;
130-
}
131-
132-
return result;
133-
}
134-
135-
public String getRepositoryName(String name) {
136-
if (name.endsWith(".git")) {
137-
name = name.substring(0, name.length() - 4);
89+
ForProject projectPermissions =
90+
permissionBackend
91+
.user(userProvider)
92+
.project(new NameKey(StringUtils.stripDotGit(repository.name)));
93+
switch (ifRestriction) {
94+
case VIEW:
95+
return projectPermissions.testOrFalse(ProjectPermission.ACCESS);
96+
case CLONE:
97+
return projectPermissions.testOrFalse(ProjectPermission.RUN_UPLOAD_PACK);
98+
case PUSH:
99+
return projectPermissions.testOrFalse(ProjectPermission.RUN_RECEIVE_PACK);
100+
default:
101+
return true;
138102
}
139-
return name;
140103
}
141104

142105
@Override
143106
public boolean hasRepositoryPermission(String name) {
144-
boolean result = false;
145-
146-
try {
147-
name = getRepositoryName(name);
148-
ProjectControl control = projectControlFactory.controlFor(new NameKey(name));
149-
result = control != null && !control.getProject().getState().equals(ProjectState.HIDDEN);
150-
} catch (NoSuchProjectException e) {
151-
result = false;
152-
}
153-
154-
return result;
107+
return permissionBackend
108+
.user(userProvider)
109+
.project(new NameKey(StringUtils.stripDotGit(name)))
110+
.testOrFalse(ProjectPermission.ACCESS);
155111
}
156112

157113
public boolean hasTeamAccess(String repositoryName) {
@@ -218,7 +174,7 @@ public int compareTo(UserModel o) {
218174
return username.compareTo(o.username);
219175
}
220176

221-
public static UserModel getAnonymous(Factory projectControl) {
222-
return new GerritToGitBlitUserModel(ANONYMOUS_USER, projectControl, null, null);
177+
public static UserModel getAnonymous() {
178+
return new GerritToGitBlitUserModel(ANONYMOUS_USER, null, null);
223179
}
224180
}

src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import com.google.gerrit.server.account.AuthRequest;
3333
import com.google.gerrit.server.account.AuthResult;
3434
import com.google.gerrit.server.permissions.PermissionBackend;
35-
import com.google.gerrit.server.project.ProjectControl;
3635
import com.google.inject.Inject;
3736
import com.google.inject.Provider;
3837
import com.google.inject.Singleton;
@@ -50,7 +49,6 @@ public class GerritToGitBlitUserService implements IAuthenticationManager, IUser
5049

5150
private final Provider<CurrentUser> userProvider;
5251
private final PermissionBackend permissionBackend;
53-
private final ProjectControl.Factory projectControl;
5452
private final AccountManager accountManager;
5553
private final DynamicItem<WebSession> webSession;
5654

@@ -60,12 +58,10 @@ public class GerritToGitBlitUserService implements IAuthenticationManager, IUser
6058
public GerritToGitBlitUserService(
6159
Provider<CurrentUser> userProvider,
6260
PermissionBackend permissionBackend,
63-
ProjectControl.Factory projectControl,
6461
AccountManager accountManager,
6562
DynamicItem<WebSession> webSession) {
6663
this.userProvider = userProvider;
6764
this.permissionBackend = permissionBackend;
68-
this.projectControl = projectControl;
6965
this.accountManager = accountManager;
7066
this.webSession = webSession;
7167
}
@@ -75,7 +71,7 @@ public UserModel authenticate(String username, char[] password, String remoteIP)
7571
String passwordString = new String(password);
7672

7773
if (username.equals(GerritToGitBlitUserModel.ANONYMOUS_USER)) {
78-
return GerritToGitBlitUserModel.getAnonymous(projectControl);
74+
return GerritToGitBlitUserModel.getAnonymous();
7975
} else if (passwordString.startsWith(GerritToGitBlitUserService.SESSIONAUTH)) {
8076
return authenticateSSO(
8177
username, passwordString.substring(GerritToGitBlitUserService.SESSIONAUTH.length()));
@@ -102,7 +98,7 @@ public UserModel authenticateSSO(String username, String sessionToken) {
10298
return null;
10399
}
104100

105-
return new GerritToGitBlitUserModel(username, projectControl, userProvider, permissionBackend);
101+
return new GerritToGitBlitUserModel(username, userProvider, permissionBackend);
106102
}
107103

108104
public UserModel authenticateBasicAuth(String username, String password) {
@@ -122,7 +118,7 @@ public UserModel authenticateBasicAuth(String username, String password) {
122118
return null;
123119
}
124120

125-
return new GerritToGitBlitUserModel(username, projectControl, userProvider, permissionBackend);
121+
return new GerritToGitBlitUserModel(username, userProvider, permissionBackend);
126122
}
127123

128124
@Override
@@ -142,7 +138,7 @@ public UserModel authenticate(HttpServletRequest httpRequest) {
142138
httpRequest.getSession().setAttribute(Constants.ATTRIB_AUTHTYPE, AuthenticationType.CONTAINER);
143139

144140
if (Strings.isNullOrEmpty(gerritUsername) || Strings.isNullOrEmpty(gerritToken)) {
145-
return GerritToGitBlitUserModel.getAnonymous(projectControl);
141+
return GerritToGitBlitUserModel.getAnonymous();
146142
} else {
147143
return authenticateSSO(gerritUsername, gerritToken);
148144
}
@@ -220,7 +216,7 @@ public UserModel getUserModel(char[] cookie) {
220216

221217
@Override
222218
public UserModel getUserModel(String username) {
223-
return new GerritToGitBlitUserModel(username, projectControl, userProvider, permissionBackend);
219+
return new GerritToGitBlitUserModel(username, userProvider, permissionBackend);
224220
}
225221

226222
@Override

0 commit comments

Comments
 (0)