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