001/* 002 Licensed to the Apache Software Foundation (ASF) under one 003 or more contributor license agreements. See the NOTICE file 004 distributed with this work for additional information 005 regarding copyright ownership. The ASF licenses this file 006 to you under the Apache License, Version 2.0 (the 007 "License"); you may not use this file except in compliance 008 with the License. You may obtain a copy of the License at 009 010 http://www.apache.org/licenses/LICENSE-2.0 011 012 Unless required by applicable law or agreed to in writing, 013 software distributed under the License is distributed on an 014 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 KIND, either express or implied. See the License for the 016 specific language governing permissions and limitations 017 under the License. 018 */ 019package org.apache.wiki.tags; 020 021import org.apache.wiki.api.core.Session; 022import org.apache.wiki.auth.AuthenticationManager; 023 024/** 025 * Includes the content if an user check validates. This has been considerably enhanced for 2.2. The possibilities for the 026 * "status"-argument are: 027 * 028 * <ul> 029 * <li>"anonymous" - the body of the tag is included if the user is completely unknown (no cookie, no password)</li> 030 * <li>"asserted" - the body of the tag is included if the user has either been named by a cookie, but not been authenticated.</li> 031 * <li>"authenticated" - the body of the tag is included if the user is validated either through the container, or by our own authentication.</li> 032 * <li>"assertionsAllowed" - the body of the tag is included if wiki allows identities to be asserted using cookies.</li> 033 * <li>"assertionsNotAllowed" - the body of the tag is included if wiki does <i>not</i> allow identities to be asserted using cookies.</li> 034 * <li>"containerAuth" - the body of the tag is included if the user is validated through the container.</li> 035 * <li>"customAuth" - the body of the tag is included if the user is validated through our own authentication.</li> 036 * <li>"known" - if the user is not anonymous</li> 037 * <li>"notAuthenticated" - the body of the tag is included if the user is not yet authenticated.</li> 038 * </ul> 039 * 040 * If the old "exists" -argument is used, it corresponds as follows: 041 * <p> 042 * <tt>exists="true" ==> status="known"<br> 043 * <tt>exists="false" ==> status="unknown"<br> 044 * </p> 045 * 046 * It is NOT a good idea to use BOTH of the arguments. 047 * 048 * @since 2.0 049 */ 050public class UserCheckTag extends WikiTagBase { 051 052 private static final long serialVersionUID = 3256438110127863858L; 053 private static final String ADMIN = "admin"; 054 private static final String ASSERTED = "asserted"; 055 private static final String AUTHENTICATED = "authenticated"; 056 private static final String ANONYMOUS = "anonymous"; 057 private static final String ASSERTIONS_ALLOWED = "assertionsallowed"; 058 private static final String ASSERTIONS_NOT_ALLOWED = "assertionsnotallowed"; 059 private static final String CONTAINER_AUTH = "containerauth"; 060 private static final String CUSTOM_AUTH = "customauth"; 061 private static final String KNOWN = "known"; 062 private static final String NOT_AUTHENTICATED = "notauthenticated"; 063 064 private String m_status; 065 066 /** 067 * {@inheritDoc} 068 */ 069 @Override 070 public void initTag() { 071 super.initTag(); 072 m_status = null; 073 } 074 075 /** 076 * Get the status as defined above. 077 * 078 * @return The status to be checked. 079 */ 080 public String getStatus() 081 { 082 return m_status; 083 } 084 085 /** 086 * Sets the status as defined above. 087 * 088 * @param status The status to be checked. 089 */ 090 public void setStatus( final String status ) 091 { 092 m_status = status.toLowerCase(); 093 } 094 095 /** 096 * {@inheritDoc} 097 * @see org.apache.wiki.tags.WikiTagBase#doWikiStartTag() 098 */ 099 @Override 100 public final int doWikiStartTag() { 101 final Session session = m_wikiContext.getWikiSession(); 102 final String status = session.getStatus(); 103 final AuthenticationManager mgr = m_wikiContext.getEngine().getManager( AuthenticationManager.class ); 104 final boolean containerAuth = mgr.isContainerAuthenticated(); 105 final boolean cookieAssertions = mgr.allowsCookieAssertions(); 106 107 if( m_status != null ) { 108 switch( m_status ) { 109 case ANONYMOUS: 110 if( status.equals( Session.ANONYMOUS ) ) { 111 return EVAL_BODY_INCLUDE; 112 } 113 break; 114 case ADMIN: 115 if( m_wikiContext.hasAdminPermissions() ) { 116 return EVAL_BODY_INCLUDE; 117 } 118 break; 119 case AUTHENTICATED: 120 if( status.equals( Session.AUTHENTICATED ) ) { 121 return EVAL_BODY_INCLUDE; 122 } 123 break; 124 case ASSERTED: 125 if( status.equals( Session.ASSERTED ) ) { 126 return EVAL_BODY_INCLUDE; 127 } 128 break; 129 case ASSERTIONS_ALLOWED: 130 if( cookieAssertions ) { 131 return EVAL_BODY_INCLUDE; 132 } 133 return SKIP_BODY; 134 case ASSERTIONS_NOT_ALLOWED: 135 if( !cookieAssertions ) { 136 return EVAL_BODY_INCLUDE; 137 } 138 return SKIP_BODY; 139 case CONTAINER_AUTH: 140 if( containerAuth ) { 141 return EVAL_BODY_INCLUDE; 142 } 143 return SKIP_BODY; 144 case CUSTOM_AUTH: 145 if( !containerAuth ) { 146 return EVAL_BODY_INCLUDE; 147 } 148 return SKIP_BODY; 149 case KNOWN: 150 if( !session.isAnonymous() ) { 151 return EVAL_BODY_INCLUDE; 152 } 153 return SKIP_BODY; 154 case NOT_AUTHENTICATED: 155 if( !status.equals( Session.AUTHENTICATED ) ) { 156 return EVAL_BODY_INCLUDE; 157 } 158 break; 159 } 160 } 161 162 return SKIP_BODY; 163 } 164 165}