From 5779988cf3a1d737322b2b6a1d568da8713509e7 Mon Sep 17 00:00:00 2001 From: James Moger Date: Fri, 30 May 2014 10:05:06 -0400 Subject: Use RepositoryNamePanel in EditRepositoryPage, rename AccessPolicyPanel --- .../com/gitblit/wicket/GitBlitWebApp.properties | 22 +-- .../gitblit/wicket/pages/EditRepositoryPage.html | 4 +- .../gitblit/wicket/pages/EditRepositoryPage.java | 63 ++------ .../gitblit/wicket/pages/NewRepositoryPage.html | 5 - .../gitblit/wicket/pages/NewRepositoryPage.java | 9 +- .../gitblit/wicket/panels/AccessPolicyPanel.html | 28 ++++ .../gitblit/wicket/panels/AccessPolicyPanel.java | 171 +++++++++++++++++++++ .../gitblit/wicket/panels/RepositoryNamePanel.html | 7 +- .../gitblit/wicket/panels/RepositoryNamePanel.java | 83 +++++++--- .../wicket/panels/RepositoryPermissionPanel.html | 25 --- .../wicket/panels/RepositoryPermissionPanel.java | 171 --------------------- 11 files changed, 290 insertions(+), 298 deletions(-) create mode 100644 src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.html create mode 100644 src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.java delete mode 100644 src/main/java/com/gitblit/wicket/panels/RepositoryPermissionPanel.html delete mode 100644 src/main/java/com/gitblit/wicket/panels/RepositoryPermissionPanel.java (limited to 'src') diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebApp.properties b/src/main/java/com/gitblit/wicket/GitBlitWebApp.properties index d90158d4..d2d1454e 100644 --- a/src/main/java/com/gitblit/wicket/GitBlitWebApp.properties +++ b/src/main/java/com/gitblit/wicket/GitBlitWebApp.properties @@ -686,16 +686,18 @@ gb.administration = administration gb.plugins = plugins gb.extensions = extensions gb.pleaseSelectProject = Please select the project! -gb.anonymousPush = Anonymous Pushes -gb.anonymousPushDescription = Anyone can see, clone, and push to this repository. -gb.pushRestrictedAuthenticated = Restrict Pushes (Authenticated) -gb.pushRestrictedAuthenticatedDescription = Anyone can see and clone this repository. All authenticated users can push. -gb.pushRestrictedNamed = Restrict Pushes (Named) -gb.pushRestrictedNamedDescription = Anyone can see and clone this repository. You choose who can push. -gb.cloneRestricted = Restrict Clones & Pushes -gb.cloneRestrictedDescription = Anyone can see this repository. You choose who can clone and push. -gb.private = Private -gb.privateRepoDescription = You choose who can see, clone, and push to this repository. +gb.accessPolicy = Access Policy +gb.accessPolicyDescription = Choose an access policy to control visibility, cloning, and pushing to this repository. +gb.anonymousPolicy = Anonymous View, Clone, & Push +gb.anonymousPolicyDescription = Anyone can see, clone, and push to this repository. +gb.authenticatedPushPolicy = Restrict Push (Authenticated) +gb.authenticatedPushPolicyDescription = Anyone can see and clone this repository. All authenticated users have RW+ push permission. +gb.namedPushPolicy = Restrict Push (Named) +gb.namedPushPolicyDescription = Anyone can see and clone this repository. You choose who can push. +gb.clonePolicy = Restrict Clone & Push +gb.clonePolicyDescription = Anyone can see this repository. You choose who can clone and push. +gb.viewPolicy = Restrict View, Clone, & Push +gb.viewPolicyDescription = You choose who can see, clone, and push to this repository. gb.initialCommit = Initial Commit gb.initialCommitDescription = This will allow you to git clone this repository immediately. Skip this step if you have already run git init locally. gb.initWithReadme = Include a README diff --git a/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.html b/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.html index b7a1976f..ccb60a5c 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.html +++ b/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.html @@ -24,10 +24,10 @@
+
+ - - diff --git a/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java b/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java index c18cd514..4759fd0d 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java +++ b/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java @@ -72,11 +72,14 @@ import com.gitblit.wicket.WicketUtils; import com.gitblit.wicket.panels.BasePanel.JavascriptEventConfirmation; import com.gitblit.wicket.panels.BulletListPanel; import com.gitblit.wicket.panels.RegistrantPermissionsPanel; +import com.gitblit.wicket.panels.RepositoryNamePanel; public class EditRepositoryPage extends RootSubPage { private final boolean isCreate; + RepositoryNamePanel namePanel; + private boolean isAdmin; RepositoryModel repositoryModel; @@ -263,60 +266,9 @@ public class EditRepositoryPage extends RootSubPage { @Override protected void onSubmit() { try { - // confirm a repository name was entered - if (repositoryModel.name == null && StringUtils.isEmpty(repositoryModel.name)) { - error(getString("gb.pleaseSetRepositoryName")); - return; - } - - // ensure name is trimmed - repositoryModel.name = repositoryModel.name.trim(); - - // automatically convert backslashes to forward slashes - repositoryModel.name = repositoryModel.name.replace('\\', '/'); - // Automatically replace // with / - repositoryModel.name = repositoryModel.name.replace("//", "/"); - - // prohibit folder paths - if (repositoryModel.name.startsWith("/")) { - error(getString("gb.illegalLeadingSlash")); - return; - } - if (repositoryModel.name.startsWith("../")) { - error(getString("gb.illegalRelativeSlash")); - return; - } - if (repositoryModel.name.contains("/../")) { - error(getString("gb.illegalRelativeSlash")); + if (!namePanel.updateModel(repositoryModel)) { return; } - if (repositoryModel.name.endsWith("/")) { - repositoryModel.name = repositoryModel.name.substring(0, repositoryModel.name.length() - 1); - } - - // confirm valid characters in repository name - Character c = StringUtils.findInvalidCharacter(repositoryModel.name); - if (c != null) { - error(MessageFormat.format(getString("gb.illegalCharacterRepositoryName"), - c)); - return; - } - - if (user.canCreate() && !user.canAdmin() && allowEditName) { - // ensure repository name begins with the user's path - if (!repositoryModel.name.startsWith(user.getPersonalPath())) { - error(MessageFormat.format(getString("gb.illegalPersonalRepositoryLocation"), - user.getPersonalPath())); - return; - } - - if (repositoryModel.name.equals(user.getPersonalPath())) { - // reset path prefix and show error - repositoryModel.name = user.getPersonalPath() + "/"; - error(getString("gb.pleaseSetRepositoryName")); - return; - } - } // confirm access restriction selection if (repositoryModel.accessRestriction == null) { @@ -426,6 +378,7 @@ public class EditRepositoryPage extends RootSubPage { } } catch (GitBlitException e) { error(e.getMessage()); + namePanel.resetModel(repositoryModel); return; } setRedirect(false); @@ -437,8 +390,10 @@ public class EditRepositoryPage extends RootSubPage { form.add(new SimpleAttributeModifier("autocomplete", "off")); // field names reflective match RepositoryModel fields - form.add(new TextField("name").setEnabled(allowEditName)); - form.add(new TextField("description")); + namePanel = new RepositoryNamePanel("namePanel", repositoryModel); + namePanel.setEditable(allowEditName); + form.add(namePanel); + form.add(ownersPalette); form.add(new CheckBox("allowForks").setEnabled(app().settings().getBoolean(Keys.web.allowForking, true))); DropDownChoice accessRestriction = new DropDownChoice("accessRestriction", diff --git a/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.html b/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.html index 05f56012..8e4e74ac 100644 --- a/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.html +++ b/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.html @@ -12,11 +12,6 @@
-
-
- -
-
diff --git a/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.java b/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.java index e2e5d4bc..0adb1ddd 100644 --- a/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.java +++ b/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.java @@ -29,7 +29,6 @@ import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; @@ -61,7 +60,7 @@ import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.WicketUtils; import com.gitblit.wicket.panels.RepositoryNamePanel; -import com.gitblit.wicket.panels.RepositoryPermissionPanel; +import com.gitblit.wicket.panels.AccessPolicyPanel; public class NewRepositoryPage extends RootSubPage { @@ -70,7 +69,7 @@ public class NewRepositoryPage extends RootSubPage { private Model gitignoreModel; private IModel addGitflowModel; private IModel addGitignoreModel; - private RepositoryPermissionPanel permissionPanel; + private AccessPolicyPanel permissionPanel; private RepositoryNamePanel namePanel; public NewRepositoryPage() { @@ -159,8 +158,6 @@ public class NewRepositoryPage extends RootSubPage { namePanel = new RepositoryNamePanel("namePanel", repositoryModel); form.add(namePanel); - form.add(new TextField("description")); - // prepare the default access controls AccessRestrictionType defaultRestriction = AccessRestrictionType.fromName( app().settings().getString(Keys.git.defaultAccessRestriction, AccessRestrictionType.PUSH.name())); @@ -177,7 +174,7 @@ public class NewRepositoryPage extends RootSubPage { repositoryModel.authorizationControl = defaultControl; repositoryModel.accessRestriction = defaultRestriction; - permissionPanel = new RepositoryPermissionPanel("permissionPanel", repositoryModel); + permissionPanel = new AccessPolicyPanel("permissionPanel", repositoryModel); form.add(permissionPanel); // diff --git a/src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.html b/src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.html new file mode 100644 index 00000000..38fa7f6a --- /dev/null +++ b/src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.html @@ -0,0 +1,28 @@ + + + + + + +

+

+ + +
+
+ + +
+
+
+ +
+
+
+ +
+ + \ No newline at end of file diff --git a/src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.java b/src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.java new file mode 100644 index 00000000..a115e251 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.java @@ -0,0 +1,171 @@ +/* + * Copyright 2014 gitblit.com. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.gitblit.wicket.panels; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Radio; +import org.apache.wicket.markup.html.form.RadioGroup; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.model.Model; + +import com.gitblit.Constants.AccessRestrictionType; +import com.gitblit.Constants.AuthorizationControl; +import com.gitblit.Keys; +import com.gitblit.models.RepositoryModel; +import com.gitblit.wicket.WicketUtils; + +/** + * A radio group panel of the 5 available authorization/access restriction combinations. + * + * @author James Moger + * + */ +public class AccessPolicyPanel extends BasePanel { + + private static final long serialVersionUID = 1L; + + private final RepositoryModel repository; + + private RadioGroup policiesGroup; + + public AccessPolicyPanel(String wicketId, RepositoryModel repository) { + super(wicketId); + this.repository = repository; + } + + @Override + protected void onInitialize() { + super.onInitialize(); + + AccessPolicy anonymousPolicy = new AccessPolicy(getString("gb.anonymousPolicy"), + getString("gb.anonymousPolicyDescription"), + "blank.png", + AuthorizationControl.AUTHENTICATED, + AccessRestrictionType.NONE); + + AccessPolicy authenticatedPushPolicy = new AccessPolicy(getString("gb.authenticatedPushPolicy"), + getString("gb.authenticatedPushPolicyDescription"), + "lock_go_16x16.png", + AuthorizationControl.AUTHENTICATED, + AccessRestrictionType.PUSH); + + AccessPolicy namedPushPolicy = new AccessPolicy(getString("gb.namedPushPolicy"), + getString("gb.namedPushPolicyDescription"), + "lock_go_16x16.png", + AuthorizationControl.NAMED, + AccessRestrictionType.PUSH); + + AccessPolicy clonePolicy = new AccessPolicy(getString("gb.clonePolicy"), + getString("gb.clonePolicyDescription"), + "lock_pull_16x16.png", + AuthorizationControl.NAMED, + AccessRestrictionType.CLONE); + + AccessPolicy viewPolicy = new AccessPolicy(getString("gb.viewPolicy"), + getString("gb.viewPolicyDescription"), + "shield_16x16.png", + AuthorizationControl.NAMED, + AccessRestrictionType.VIEW); + + List policies = new ArrayList(); + if (app().settings().getBoolean(Keys.git.allowAnonymousPushes, false)) { + policies.add(anonymousPolicy); + } + policies.add(authenticatedPushPolicy); + policies.add(namedPushPolicy); + policies.add(clonePolicy); + policies.add(viewPolicy); + + AccessRestrictionType defaultRestriction = repository.accessRestriction; + if (defaultRestriction == null) { + defaultRestriction = AccessRestrictionType.fromName(app().settings().getString(Keys.git.defaultAccessRestriction, + AccessRestrictionType.PUSH.name())); + } + + AuthorizationControl defaultControl = repository.authorizationControl; + if (defaultControl == null) { + defaultControl = AuthorizationControl.fromName(app().settings().getString(Keys.git.defaultAuthorizationControl, + AuthorizationControl.NAMED.name())); + } + + AccessPolicy defaultPolicy = namedPushPolicy; + for (AccessPolicy policy : policies) { + if (policy.type == defaultRestriction && policy.control == defaultControl) { + defaultPolicy = policy; + } + } + + policiesGroup = new RadioGroup<>("policiesGroup", new Model(defaultPolicy)); + ListView policiesList = new ListView("policies", policies) { + + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem item) { + AccessPolicy p = item.getModelObject(); + item.add(new Radio("radio", item.getModel())); + item.add(WicketUtils.newImage("image", p.image)); + item.add(new Label("name", p.name)); + item.add(new Label("description", p.description)); + } + }; + policiesGroup.add(policiesList); + + setOutputMarkupId(true); + + add(policiesGroup); + } + + public void updateModel(RepositoryModel repository) { + AccessPolicy policy = policiesGroup.getModelObject(); + repository.authorizationControl = policy.control; + repository.accessRestriction = policy.type; + } + + @Override + protected boolean getStatelessHint() { + return false; + } + + private static class AccessPolicy implements Serializable { + + private static final long serialVersionUID = 1L; + + final String name; + final String description; + final String image; + final AuthorizationControl control; + final AccessRestrictionType type; + + AccessPolicy(String name, String description, String img, AuthorizationControl control, AccessRestrictionType type) { + this.name = name; + this.description = description; + this.image = img; + this.control = control; + this.type = type; + } + + @Override + public String toString() { + return name; + } + } +} diff --git a/src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.html b/src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.html index f3a0738e..3c651620 100644 --- a/src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.html +++ b/src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.html @@ -11,16 +11,19 @@
- -
 

/  
+ +
+
+ +
diff --git a/src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.java b/src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.java index 7b20adec..358ff59b 100644 --- a/src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.java +++ b/src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.java @@ -17,18 +17,20 @@ package com.gitblit.wicket.panels; import java.text.MessageFormat; import java.util.ArrayList; -import java.util.List; +import java.util.Set; +import java.util.TreeSet; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.TextField; +import com.gitblit.models.ProjectModel; import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; /** - * A radio group panel of the 5 available authorization/access restriction combinations. + * A panel for naming a repository, specifying it's project, and entering a description. * * @author James Moger * @@ -37,44 +39,79 @@ public class RepositoryNamePanel extends BasePanel { private static final long serialVersionUID = 1L; - private final RepositoryModel repository; - private String fullName; + private DropDownChoice projectChoice; + + private TextField nameField; + public RepositoryNamePanel(String wicketId, RepositoryModel repository) { super(wicketId); - this.repository = repository; - } - - @Override - protected void onInitialize() { - super.onInitialize(); GitBlitWebSession session = GitBlitWebSession.get(); UserModel user = session.getUser(); - // build project list for repository destination + // build project set for repository destination String defaultProject = null; - List projects = new ArrayList(); + Set projectNames = new TreeSet(); + + // add the registered/known projects + for (ProjectModel project : app().projects().getProjectModels(user, false)) { + // TODO issue-351: user.canAdmin(project) + if (user.canAdmin()) { + if (project.isRoot) { + projectNames.add("/"); + } else { + projectNames.add(project.name + "/"); + } + } + } - if (user.canAdmin()) { - projects.add("/"); - defaultProject = "/"; + // add the user's personal project namespace + if (user.canAdmin() || user.canCreate()) { + projectNames.add(user.getPersonalPath() + "/"); } - if (user.canCreate()) { - String p = user.getPersonalPath() + "/"; - projects.add(p); - if (defaultProject == null) { - // only prefer personal namespace if default is not already set - defaultProject = p; + if (!StringUtils.isEmpty(repository.name)) { + // editing a repository name + // set the defaultProject to the current repository project + defaultProject = repository.projectPath; + if (StringUtils.isEmpty(defaultProject)) { + defaultProject = "/"; + } else { + defaultProject += "/"; + } + + projectNames.add(defaultProject); + } + + // if default project is not already set, set preference based on the user permissions + if (defaultProject == null) { + if (user.canAdmin()) { + defaultProject = "/"; + } else if (user.canCreate()) { + defaultProject = user.getPersonalPath() + "/"; } } + // update the model which is reflectively mapped to the Wicket fields by name repository.projectPath = defaultProject; + if (repository.projectPath.length() > 1 && !StringUtils.isEmpty(repository.name)) { + repository.name = repository.name.substring(repository.projectPath.length()); + } + projectChoice = new DropDownChoice("projectPath", new ArrayList(projectNames)); + nameField = new TextField("name"); + + // only enable project selection if we actually have multiple choices + add(projectChoice.setEnabled(projectNames.size() > 1)); + add(nameField); + add(new TextField("description")); + } - add(new DropDownChoice("projectPath", projects)); - add(new TextField("name")); + public void setEditable(boolean editable) { + // only enable project selection if we actually have multiple choices + projectChoice.setEnabled(projectChoice.getChoices().size() > 1 && editable); + nameField.setEnabled(editable); } public boolean updateModel(RepositoryModel repositoryModel) { diff --git a/src/main/java/com/gitblit/wicket/panels/RepositoryPermissionPanel.html b/src/main/java/com/gitblit/wicket/panels/RepositoryPermissionPanel.html deleted file mode 100644 index 6a4d5cef..00000000 --- a/src/main/java/com/gitblit/wicket/panels/RepositoryPermissionPanel.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - -
-
- - -
-
-
- -
-
-
- -
- - \ No newline at end of file diff --git a/src/main/java/com/gitblit/wicket/panels/RepositoryPermissionPanel.java b/src/main/java/com/gitblit/wicket/panels/RepositoryPermissionPanel.java deleted file mode 100644 index ed3f1fed..00000000 --- a/src/main/java/com/gitblit/wicket/panels/RepositoryPermissionPanel.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright 2014 gitblit.com. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.gitblit.wicket.panels; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.form.Radio; -import org.apache.wicket.markup.html.form.RadioGroup; -import org.apache.wicket.markup.html.list.ListItem; -import org.apache.wicket.markup.html.list.ListView; -import org.apache.wicket.model.Model; - -import com.gitblit.Constants.AccessRestrictionType; -import com.gitblit.Constants.AuthorizationControl; -import com.gitblit.Keys; -import com.gitblit.models.RepositoryModel; -import com.gitblit.wicket.WicketUtils; - -/** - * A radio group panel of the 5 available authorization/access restriction combinations. - * - * @author James Moger - * - */ -public class RepositoryPermissionPanel extends BasePanel { - - private static final long serialVersionUID = 1L; - - private final RepositoryModel repository; - - private RadioGroup permissionGroup; - - public RepositoryPermissionPanel(String wicketId, RepositoryModel repository) { - super(wicketId); - this.repository = repository; - } - - @Override - protected void onInitialize() { - super.onInitialize(); - - Permission anonymousPermission = new Permission(getString("gb.anonymousPush"), - getString("gb.anonymousPushDescription"), - "blank.png", - AuthorizationControl.AUTHENTICATED, - AccessRestrictionType.NONE); - - Permission authenticatedPermission = new Permission(getString("gb.pushRestrictedAuthenticated"), - getString("gb.pushRestrictedAuthenticatedDescription"), - "lock_go_16x16.png", - AuthorizationControl.AUTHENTICATED, - AccessRestrictionType.PUSH); - - Permission publicPermission = new Permission(getString("gb.pushRestrictedNamed"), - getString("gb.pushRestrictedNamedDescription"), - "lock_go_16x16.png", - AuthorizationControl.NAMED, - AccessRestrictionType.PUSH); - - Permission protectedPermission = new Permission(getString("gb.cloneRestricted"), - getString("gb.cloneRestrictedDescription"), - "lock_pull_16x16.png", - AuthorizationControl.NAMED, - AccessRestrictionType.CLONE); - - Permission privatePermission = new Permission(getString("gb.private"), - getString("gb.privateRepoDescription"), - "shield_16x16.png", - AuthorizationControl.NAMED, - AccessRestrictionType.VIEW); - - List permissions = new ArrayList(); - if (app().settings().getBoolean(Keys.git.allowAnonymousPushes, false)) { - permissions.add(anonymousPermission); - } - permissions.add(authenticatedPermission); - permissions.add(publicPermission); - permissions.add(protectedPermission); - permissions.add(privatePermission); - - AccessRestrictionType defaultRestriction = repository.accessRestriction; - if (defaultRestriction == null) { - defaultRestriction = AccessRestrictionType.fromName(app().settings().getString(Keys.git.defaultAccessRestriction, - AccessRestrictionType.PUSH.name())); - } - - AuthorizationControl defaultControl = repository.authorizationControl; - if (defaultControl == null) { - defaultControl = AuthorizationControl.fromName(app().settings().getString(Keys.git.defaultAuthorizationControl, - AuthorizationControl.NAMED.name())); - } - - Permission defaultPermission = publicPermission; - for (Permission permission : permissions) { - if (permission.type == defaultRestriction && permission.control == defaultControl) { - defaultPermission = permission; - } - } - - permissionGroup = new RadioGroup<>("permissionsGroup", new Model(defaultPermission)); - ListView permissionsList = new ListView("permissions", permissions) { - - private static final long serialVersionUID = 1L; - - @Override - protected void populateItem(ListItem item) { - Permission p = item.getModelObject(); - item.add(new Radio("radio", item.getModel())); - item.add(WicketUtils.newImage("image", p.image)); - item.add(new Label("name", p.name)); - item.add(new Label("description", p.description)); - } - }; - permissionGroup.add(permissionsList); - - setOutputMarkupId(true); - - add(permissionGroup); - } - - public void updateModel(RepositoryModel repository) { - Permission permission = permissionGroup.getModelObject(); - repository.authorizationControl = permission.control; - repository.accessRestriction = permission.type; - } - - @Override - protected boolean getStatelessHint() { - return false; - } - - private static class Permission implements Serializable { - - private static final long serialVersionUID = 1L; - - final String name; - final String description; - final String image; - final AuthorizationControl control; - final AccessRestrictionType type; - - Permission(String name, String description, String img, AuthorizationControl control, AccessRestrictionType type) { - this.name = name; - this.description = description; - this.image = img; - this.control = control; - this.type = type; - } - - @Override - public String toString() { - return name; - } - } -} -- cgit v1.2.3