2020import com .gitblit .models .TeamModel ;
2121import com .gitblit .models .UserModel ;
2222import com .gitblit .utils .StringUtils ;
23- import com .google .gerrit .extensions .client .ProjectState ;
2423import com .google .gerrit .reviewdb .client .Project .NameKey ;
2524import com .google .gerrit .server .CurrentUser ;
2625import com .google .gerrit .server .permissions .PermissionBackend ;
26+ import com .google .gerrit .server .permissions .PermissionBackend .ForProject ;
2727import 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 ;
3129import com .google .inject .Provider ;
3230import java .util .HashSet ;
3331import 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}
0 commit comments