/** * Copyright 2012 Universitat Pompeu Fabra. * * 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 org.onexus.ui.authentication.persona; import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.html.image.Image; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.request.resource.PackageResourceReference; import org.apache.wicket.request.resource.ResourceReference; /** * A panel that is used for non-authenticated users */ public class GuestPanel extends Panel { private static final long serialVersionUID = 1L; public static final JavaScriptHeaderItem INCLUDE = JavaScriptHeaderItem.forUrl("https://login.persona.org/include.js"); private static final ResourceReference RED_ICON = new PackageResourceReference( GuestPanel.class, "sign_in_red.png"); private static final ResourceReference BLUE_ICON = new PackageResourceReference( GuestPanel.class, "sign_in_blue.png"); private static final ResourceReference GREEN_ICON = new PackageResourceReference( GuestPanel.class, "sign_in_green.png"); private static final ResourceReference ORANGE_ICON = new PackageResourceReference( GuestPanel.class, "sign_in_orange.png"); private static final ResourceReference GREY_ICON = new PackageResourceReference( GuestPanel.class, "sign_in_grey.png"); /** * The possible styles of the default "Sign In" image button provided by https://browserid.org */ public enum Style { RED, BLUE, GREEN, ORANGE, GREY } private final Style style; public GuestPanel(String id, Style style) { super(id); this.style = style; Component signInImage = createSignInButton("signInImage"); signInImage.add(new VerifyBehavior() { private static final long serialVersionUID = 1L; @Override protected void onSuccess(AjaxRequestTarget target) { GuestPanel.this.onSuccess(target); } @Override protected void onFailure(AjaxRequestTarget target, String failureReason) { GuestPanel.this.onFailure(target, failureReason); } }); add(signInImage); } protected Component createSignInButton(String componentId) { Image image = new Image(componentId, getImage(style)); image.add(AttributeModifier.replace("alt", "Sign In")); return image; } protected ResourceReference getImage(final Style style) { final ResourceReference imageIcon; switch (style) { case RED: imageIcon = RED_ICON; break; case GREEN: imageIcon = GREEN_ICON; break; case ORANGE: imageIcon = ORANGE_ICON; break; case GREY: imageIcon = GREY_ICON; break; case BLUE: default: imageIcon = BLUE_ICON; break; } return imageIcon; } @Override public void renderHead(IHeaderResponse response) { super.renderHead(response); renderBrowserIdJavaScript(response); } /** * Renders a reference for external browserid.js (loaded from browserid.org). <br/> * Can be overridden with local reference to browserid.js if needed. * * @param response the current header response */ protected void renderBrowserIdJavaScript(final IHeaderResponse response) { response.render(INCLUDE); } /** * A callback called when the authentication is successful * * @param target the current request target */ protected void onSuccess(final AjaxRequestTarget target) { } /** * A callback called when the authentication has failed * * @param target the current request target * @param target * @param failureReason */ protected void onFailure(final AjaxRequestTarget target, final String failureReason) { } }