From 6b18b0761b726fd9aef1ebcc21b760378f7d4b5c Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 16 Jun 2014 17:36:12 -0400 Subject: [PATCH] Merge release 1.6.0 --- src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.java | 199 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 199 insertions(+), 0 deletions(-) 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 0000000..d8dcdce --- /dev/null +++ b/src/main/java/com/gitblit/wicket/panels/AccessPolicyPanel.java @@ -0,0 +1,199 @@ +/* + * 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.ajax.form.AjaxFormChoiceComponentUpdatingBehavior; +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.markup.html.panel.Fragment; +import org.apache.wicket.model.IModel; +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 final AjaxFormChoiceComponentUpdatingBehavior callback; + + private RadioGroup<AccessPolicy> policiesGroup; + + private IModel<Boolean> allowForks; + + public AccessPolicyPanel(String wicketId, RepositoryModel repository) { + this(wicketId, repository, null); + } + + public AccessPolicyPanel(String wicketId, RepositoryModel repository, AjaxFormChoiceComponentUpdatingBehavior callback) { + super(wicketId); + this.repository = repository; + this.callback = callback; + } + + @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<AccessPolicy> policies = new ArrayList<AccessPolicy>(); + 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<AccessPolicy>(defaultPolicy)); + ListView<AccessPolicy> policiesList = new ListView<AccessPolicy>("policies", policies) { + + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem<AccessPolicy> item) { + AccessPolicy p = item.getModelObject(); + item.add(new Radio<AccessPolicy>("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); + if (callback != null) { + policiesGroup.add(callback); + policiesGroup.setOutputMarkupId(true); + } + add(policiesGroup); + + allowForks = Model.of(app().settings().getBoolean(Keys.web.allowForking, true)); + if (allowForks.getObject()) { + Fragment fragment = new Fragment("allowForks", "allowForksFragment", this); + fragment.add(new BooleanOption("allowForks", + getString("gb.allowForks"), + getString("gb.allowForksDescription"), + allowForks)); + add(fragment); + } else { + add(new Label("allowForks").setVisible(false)); + } + + setOutputMarkupId(true); + } + + public void updateModel(RepositoryModel repository) { + AccessPolicy policy = policiesGroup.getModelObject(); + repository.authorizationControl = policy.control; + repository.accessRestriction = policy.type; + repository.allowForks = allowForks.getObject(); + } + + @Override + protected boolean getStatelessHint() { + return false; + } + + public 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; + } + } +} -- Gitblit v1.9.1