Hi,
I have implemented the optional CMA that is described in the
Ext . User Management proposal (http://tinyurl.com/28br55).
I have attached the svn diff file from my workspace.
Please let me know if you have any comments.
Thanks.
Shing Wai Chan
Index: apps/weblogger/src/java/org/apache/roller/weblogger/config/roller.properties
===================================================================
--- apps/weblogger/src/java/org/apache/roller/weblogger/config/roller.properties (revision 578204)
+++ apps/weblogger/src/java/org/apache/roller/weblogger/config/roller.properties (working copy)
@@ -358,6 +358,9 @@
passwds.encryption.enabled=true
passwds.encryption.algorithm=SHA
+# Enable container managed authentication
+authentication.cma.enabled=false
+
# Role to globbal permissions mappings
role.names=anonymous,editor,admin
role.action.anonymous=comment
Index: apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java
===================================================================
--- apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java (revision 578204)
+++ apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/admin/ModifyUser.java (working copy)
@@ -24,6 +24,7 @@
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.business.UserManager;
+import org.apache.roller.weblogger.config.WebloggerConfig;
import org.apache.roller.weblogger.pojos.User;
import org.apache.roller.weblogger.ui.core.RollerContext;
import org.apache.roller.weblogger.ui.struts2.util.UIAction;
@@ -35,6 +36,8 @@
public class ModifyUser extends UIAction {
private static Log log = LogFactory.getLog(ModifyUser.class);
+
+ private static final boolean isCMA = WebloggerConfig.getBooleanProperty("authentication.cma.enabled");
// user we are modifying
private User user = new User();
@@ -150,7 +153,9 @@
}
- RollerContext.flushAuthenticationUserCache(getUser().getUserName());
+ if (!isCMA) {
+ RollerContext.flushAuthenticationUserCache(getUser().getUserName());
+ }
// save the updated profile
mgr.saveUser(getUser());
Index: apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/Register.java
===================================================================
--- apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/Register.java (revision 578204)
+++ apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/core/Register.java (working copy)
@@ -90,7 +90,8 @@
// and retrieve custom user data to pre-populate form.
boolean usingSSO = WebloggerConfig.getBooleanProperty("users.sso.enabled");
if(usingSSO) {
- User fromSSO = CustomUserRegistry.getUserDetailsFromAuthentication();
+ User fromSSO = CustomUserRegistry.getUserDetailsFromAuthentication(getServletRequest());
+
if(fromSSO != null) {
getBean().copyFrom(fromSSO);
setFromSS0(true);
@@ -245,7 +246,8 @@
boolean usingSSO = WebloggerConfig.getBooleanProperty("users.sso.enabled");
if(usingSSO) {
boolean storePassword = WebloggerConfig.getBooleanProperty("users.sso.passwords.saveInRollerDb");
- User fromSSO = CustomUserRegistry.getUserDetailsFromAuthentication();
+ User fromSSO = CustomUserRegistry.getUserDetailsFromAuthentication(getServletRequest());
+
if(fromSSO != null) {
String password = WebloggerConfig.getProperty("users.sso.passwords.defaultValue", "<unknown>");
if(storePassword) {
Index: apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerSession.java
===================================================================
--- apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerSession.java (revision 578204)
+++ apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/RollerSession.java (working copy)
@@ -82,7 +82,7 @@
// provisioning enabled, get provisioner and execute
AutoProvision provisioner = RollerContext.getAutoProvision();
if(provisioner != null) {
- boolean userProvisioned = provisioner.execute();
+ boolean userProvisioned = provisioner.execute(request);
if(userProvisioned) {
// try lookup again real quick
user = umgr.getUserByUserName(principal.getName());
Index: apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/CmaRollerContext.java
===================================================================
--- apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/CmaRollerContext.java (revision 0)
+++ apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/CmaRollerContext.java (revision 0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * 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.apache.roller.weblogger.ui.core;
+
+import javax.servlet.ServletContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+/**
+ * Initialize the Roller web application/context for container managed
+ * authentication.
+ *
+ * @author Shing Wai Chan
+ */
+public class CmaRollerContext extends RollerContext {
+
+ private static Log log = LogFactory.getLog(CmaRollerContext.class);
+
+ public CmaRollerContext() {
+ super();
+ }
+
+ /**
+ * Setup Acegi security features.
+ */
+ protected void initializeSecurityFeatures(ServletContext context) {
+ // no need to setup Acegi security
+ }
+}
Index: apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/security/AutoProvision.java
===================================================================
--- apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/security/AutoProvision.java (revision 578204)
+++ apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/security/AutoProvision.java (working copy)
@@ -17,8 +17,10 @@
*/
package org.apache.roller.weblogger.ui.core.security;
+import javax.servlet.http.HttpServletRequest;
+
public interface AutoProvision {
- public boolean execute();
+ public boolean execute(HttpServletRequest request);
}
Index: apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/security/BasicUserAutoProvision.java
===================================================================
--- apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/security/BasicUserAutoProvision.java (revision 578204)
+++ apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/security/BasicUserAutoProvision.java (working copy)
@@ -17,6 +17,8 @@
*/
package org.apache.roller.weblogger.ui.core.security;
+import javax.servlet.http.HttpServletRequest;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.WebloggerException;
@@ -37,8 +39,8 @@
*
* @see org.apache.roller.weblogger.ui.core.security.AutoProvision#execute()
*/
- public boolean execute() {
- User ud = CustomUserRegistry.getUserDetailsFromAuthentication();
+ public boolean execute(HttpServletRequest request) {
+ User ud = CustomUserRegistry.getUserDetailsFromAuthentication(request);
if(ud != null) {
UserManager mgr;
Index: apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/security/CustomUserRegistry.java
===================================================================
--- apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/security/CustomUserRegistry.java (revision 578204)
+++ apps/weblogger/src/java/org/apache/roller/weblogger/ui/core/security/CustomUserRegistry.java (working copy)
@@ -18,11 +18,13 @@
package org.apache.roller.weblogger.ui.core.security;
import java.util.Locale;
+import java.util.Set;
import java.util.TimeZone;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
+import javax.servlet.http.HttpServletRequest;
import org.acegisecurity.Authentication;
import org.acegisecurity.context.SecurityContextHolder;
@@ -39,21 +41,24 @@
*/
public class CustomUserRegistry {
- private static Log log = LogFactory.getLog(CustomUserRegistry.class);
+ private static final Log log = LogFactory.getLog(CustomUserRegistry.class);
+
+ private static final String DEFAULT_SNAME_LDAP_ATTRIBUTE = "screenname";
+ private static final String DEFAULT_UID_LDAP_ATTRIBUTE = "uid";
+ private static final String DEFAULT_NAME_LDAP_ATTRIBUTE = "cn";
+ private static final String DEFAULT_EMAIL_LDAP_ATTRIBUTE = "mail";
+ private static final String DEFAULT_LOCALE_LDAP_ATTRIBUTE = "locale";
+ private static final String DEFAULT_TIMEZONE_LDAP_ATTRIBUTE = "timezone";
- private static String DEFAULT_SNAME_LDAP_ATTRIBUTE = "screenname";
- private static String DEFAULT_NAME_LDAP_ATTRIBUTE = "cn";
- private static String DEFAULT_EMAIL_LDAP_ATTRIBUTE = "mail";
- private static String DEFAULT_LOCALE_LDAP_ATTRIBUTE = "locale";
- private static String DEFAULT_TIMEZONE_LDAP_ATTRIBUTE = "timezone";
-
- private static String SNAME_LDAP_PROPERTY = "users.sso.registry.ldap.attributes.screenname";
- private static String NAME_LDAP_PROPERTY = "users.sso.registry.ldap.attributes.name";
- private static String EMAIL_LDAP_PROPERTY = "users.sso.registry.ldap.attributes.email";
- private static String LOCALE_LDAP_PROPERTY = "users.sso.registry.ldap.attributes.locale";
- private static String TIMEZONE_LDAP_PROPERTY = "users.sso.registry.ldap.attributes.timezone";
-
- public static User getUserDetailsFromAuthentication() {
+ private static final String SNAME_LDAP_PROPERTY = "users.sso.registry.ldap.attributes.screenname";
+ private static final String UID_LDAP_PROPERTY = "users.sso.registry.ldap.attributes.uid";
+ private static final String NAME_LDAP_PROPERTY = "users.sso.registry.ldap.attributes.name";
+ private static final String EMAIL_LDAP_PROPERTY = "users.sso.registry.ldap.attributes.email";
+ private static final String LOCALE_LDAP_PROPERTY = "users.sso.registry.ldap.attributes.locale";
+ private static final String TIMEZONE_LDAP_PROPERTY = "users.sso.registry.ldap.attributes.timezone";
+
+ public static User getUserDetailsFromAuthentication(HttpServletRequest request) {
+
boolean usingSSO = WebloggerConfig.getBooleanProperty("users.sso.enabled");
if(!usingSSO) {
log.info("SSO is not enabled. Skipping CustomUserRegistry functionality.");
@@ -62,82 +67,107 @@
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ User ud = new User();
+ // setting default
+ ud.setId(null);
+ ud.setLocale(Locale.getDefault().toString());
+ ud.setTimeZone(TimeZone.getDefault().getID());
+ ud.setDateCreated(new java.util.Date());
+
+ String userName = null;
+ String password = null;
+ String fullName = null;
+ String email = null;
+ String screenName = null;
+ String locale = null;
+ String timezone = null;
+ boolean enabled = false;
+
if(authentication == null) {
- log.warn("No Authentication found in SecurityContextHolder.");
- return null;
- }
+ // Try to get SSO data from HttpServletRequest
+ userName = getRequestAttribute(request, WebloggerConfig.getProperty(UID_LDAP_PROPERTY, DEFAULT_SNAME_LDAP_ATTRIBUTE));
+
+ screenName = getRequestAttribute(request, WebloggerConfig.getProperty(SNAME_LDAP_PROPERTY, DEFAULT_SNAME_LDAP_ATTRIBUTE));
+
+ fullName = getRequestAttribute(request, WebloggerConfig.getProperty(NAME_LDAP_PROPERTY, DEFAULT_NAME_LDAP_ATTRIBUTE));
+
+ email = getRequestAttribute(request, WebloggerConfig.getProperty(EMAIL_LDAP_PROPERTY, DEFAULT_EMAIL_LDAP_ATTRIBUTE));
+
+ locale = getRequestAttribute(request, WebloggerConfig.getProperty(LOCALE_LDAP_PROPERTY, DEFAULT_LOCALE_LDAP_ATTRIBUTE));
+
+ timezone = getRequestAttribute(request, WebloggerConfig.getProperty(TIMEZONE_LDAP_PROPERTY, DEFAULT_TIMEZONE_LDAP_ATTRIBUTE));
+
+
+ if (userName == null && fullName == null && screenName == null &&
+ email == null && locale == null && timezone == null) {
+
+ log.warn("No Authentication found in SecurityContextHolder and HttpServletRequest.");
+ return null;
+ } else {
+ enabled = true;
+ }
+ } else {
- Object oPrincipal = authentication.getPrincipal();
+ Object oPrincipal = authentication.getPrincipal();
- if(oPrincipal == null) {
- log.warn("Principal is null. Skipping auto-registration.");
- return null;
- }
+ if(oPrincipal == null) {
+ log.warn("Principal is null. Skipping auto-registration.");
+ return null;
+ }
- if (!(oPrincipal instanceof UserDetails)) {
- log.warn("Unsupported Principal type in Authentication. Skipping auto-registration.");
- return null;
- }
+ if (!(oPrincipal instanceof UserDetails)) {
+ log.warn("Unsupported Principal type in Authentication. Skipping auto-registration.");
+ return null;
+ }
- UserDetails userDetails = (UserDetails) oPrincipal;
+ UserDetails userDetails = (UserDetails) oPrincipal;
- String userName = userDetails.getUsername();
- String password = userDetails.getPassword();
- boolean enabled = userDetails.isEnabled();
+ userName = userDetails.getUsername();
+ password = userDetails.getPassword();
+ enabled = userDetails.isEnabled();
- User ud = new User();
- ud.setId(null);
- ud.setUserName(userName);
+ if(userDetails instanceof RollerUserDetails) {
+ RollerUserDetails rollerDetails = (RollerUserDetails) userDetails;
+
+ screenName = rollerDetails.getScreenName();
+ fullName = rollerDetails.getFullName();
+ email = rollerDetails.getEmailAddress();
+ locale = rollerDetails.getLocale();
+ timezone = rollerDetails.getTimeZone();
+
+ } else if(userDetails instanceof LdapUserDetails) {
+ LdapUserDetails ldapDetails = (LdapUserDetails) userDetails;
+
+ Attributes attributes = ldapDetails.getAttributes();
+ screenName = getLdapAttribute(attributes, WebloggerConfig.getProperty(SNAME_LDAP_PROPERTY, DEFAULT_SNAME_LDAP_ATTRIBUTE));
+ fullName = getLdapAttribute(attributes, WebloggerConfig.getProperty(NAME_LDAP_PROPERTY, DEFAULT_NAME_LDAP_ATTRIBUTE));
+ email = getLdapAttribute(attributes, WebloggerConfig.getProperty(EMAIL_LDAP_PROPERTY, DEFAULT_EMAIL_LDAP_ATTRIBUTE));
+ locale = getLdapAttribute(attributes, WebloggerConfig.getProperty(LOCALE_LDAP_PROPERTY, DEFAULT_LOCALE_LDAP_ATTRIBUTE));
+ timezone = getLdapAttribute(attributes, WebloggerConfig.getProperty(TIMEZONE_LDAP_PROPERTY, DEFAULT_TIMEZONE_LDAP_ATTRIBUTE));
+
+ }
+ }
+
boolean storePassword = WebloggerConfig.getBooleanProperty("users.sso.passwords.save");
if(!storePassword) {
password = WebloggerConfig.getProperty("users.sso.passwords.defaultValue","<unknown>");
}
+
ud.setPassword(password);
ud.setEnabled(enabled ? Boolean.TRUE : Boolean.FALSE);
- ud.setLocale(Locale.getDefault().toString());
- ud.setTimeZone(TimeZone.getDefault().getID());
- ud.setDateCreated(new java.util.Date());
-
- if(userDetails instanceof RollerUserDetails) {
- RollerUserDetails rollerDetails = (RollerUserDetails) userDetails;
-
- ud.setScreenName(rollerDetails.getScreenName());
-
- ud.setFullName(rollerDetails.getFullName());
- //TODO: Bug here as setting email addy to a full name value?
- ud.setEmailAddress(rollerDetails.getFullName());
- if(rollerDetails.getTimeZone() != null) {
- ud.setTimeZone(rollerDetails.getTimeZone());
- }
-
- if(rollerDetails.getLocale() != null) {
- ud.setLocale(rollerDetails.getLocale());
- }
-
- } else if(userDetails instanceof LdapUserDetails) {
- LdapUserDetails ldapDetails = (LdapUserDetails) userDetails;
- Attributes attributes = ldapDetails.getAttributes();
- String sname = getLdapAttribute(attributes, WebloggerConfig.getProperty(SNAME_LDAP_PROPERTY, DEFAULT_SNAME_LDAP_ATTRIBUTE));
- String name = getLdapAttribute(attributes, WebloggerConfig.getProperty(NAME_LDAP_PROPERTY, DEFAULT_NAME_LDAP_ATTRIBUTE));
- String email = getLdapAttribute(attributes, WebloggerConfig.getProperty(EMAIL_LDAP_PROPERTY, DEFAULT_EMAIL_LDAP_ATTRIBUTE));
+ ud.setUserName(userName);
+ ud.setFullName(fullName);
+ ud.setEmailAddress(email);
+ ud.setScreenName(screenName);
+ if (locale != null) {
+ ud.setLocale(locale);
+ }
+ if (timezone != null) {
+ ud.setTimeZone(timezone);
+ }
- ud.setScreenName(sname);
- ud.setFullName(name);
- ud.setEmailAddress(email);
-
- String locale = getLdapAttribute(attributes, WebloggerConfig.getProperty(LOCALE_LDAP_PROPERTY, DEFAULT_LOCALE_LDAP_ATTRIBUTE));
- String timezone = getLdapAttribute(attributes, WebloggerConfig.getProperty(TIMEZONE_LDAP_PROPERTY, DEFAULT_TIMEZONE_LDAP_ATTRIBUTE));
-
- if(locale != null) {
- ud.setLocale(locale);
- }
- if(timezone != null) {
- ud.setTimeZone(timezone);
- }
- }
-
return ud;
}
@@ -165,5 +195,21 @@
return oValue.toString();
}
+
+ private static String getRequestAttribute(HttpServletRequest request, String attributeName) {
+
+ String attr = null;
+ Object attrObj = request.getAttribute(attributeName);
+ if (attrObj instanceof String) {
+ attr = (String)attrObj;
+ } else if (attrObj instanceof Set) {
+ Set attrSet = (Set)attrObj;
+ if (!attrSet.isEmpty()) {
+ attr = (String)attrSet.iterator().next();
+ }
+ }
+
+ return attr;
+ }
}
Index: apps/weblogger/build.properties
===================================================================
--- apps/weblogger/build.properties (revision 578204)
+++ apps/weblogger/build.properties (working copy)
@@ -9,7 +9,7 @@
build.debug=true
build.sourcelevel=1.5
build.deprecation=false
-junit.haltonerror=false
+junit.haltonerror=true
# automated testing contorls
Index: apps/weblogger/web/themes/frontpage/Weblog.vm
===================================================================
--- apps/weblogger/web/themes/frontpage/Weblog.vm (revision 578204)
+++ apps/weblogger/web/themes/frontpage/Weblog.vm (working copy)
@@ -1,4 +1,4 @@
-#includeTemplate($model.weblog "_header")
+#includeTemplate($model.weblog "_header")
#set($maxResults = 25)
#set($since = 365)
@@ -155,23 +155,49 @@
<br />
</div>
+
+
<br />
<div class="sidebarBodyHead">
<div class="menu-tr">
<div class="menu-tl">
- <h3>Hot Tags</h3>
+ <h3>SocialFish Services</h3>
</div>
</div>
</div>
+ <div class="sidebarBody">
+
+ #set($services = $disco.getServiceRegistry().getServices())
+ #foreach($service in $services)
+ $service.name<br />
+ #set($link = $service.getMainLink("text/html").getHref())
+ <a href="$link">$link</a><br />
+ #end
+ <br />
+
+ </div>
+
+
+
+
+ <br />
+ <div class="sidebarBodyHead">
+ <div class="menu-tr">
+ <div class="menu-tl">
+ <h3>SocialFish-wide Tags</h3>
+ </div>
+ </div>
+ </div>
+
<div id="tagbin" class="sidebarBody">
- #set($sitetags = $site.getPopularTags(-1, 100))
- #foreach ($tag in $sitetags)
- #if ($tag.count > 4)
- <a class="tag s${tag.intensity}" href="$url.tag($tag.name)"
- title="$tag.count">$tag.name</a>
- #end
+
+ #set($tags = $tagCloud.getCombinedTags())
+ #foreach($tag in $tags)
+ $tag.name#foreach($subtag in $tag.tags)[<a href="$subtag.href"
+ title="$subtag.sourceName">$subtag.count</a>]#end
#end
+
</div>
Index: apps/weblogger/web/themes/frontpage/_css.vm
===================================================================
--- apps/weblogger/web/themes/frontpage/_css.vm (revision 578204)
+++ apps/weblogger/web/themes/frontpage/_css.vm (working copy)
@@ -5,9 +5,9 @@
body {
margin: 0px;
padding: 0px;
-background-color: white;
-color: black;
-font-family: Arial, Helvetica, sans-serif;
+background-color: #FFF;
+color: #333;
+font-family: sans-serif;
font-size: 12px;
}
p.subtitle {
@@ -19,20 +19,23 @@
margin: 0px 0px 15px 0px;
}
h1 {
- background: transparent;
- font-size: 20px;
+ font-family:sans-serif;
+ # background: transparent;
+ font-size: 18px;
font-weight: bold;
}
h2 {
- background: transparent;
- font-size: large;
+ font-family:sans-serif;
+# background: transparent;
+ font-size: 15px;
font-weight: bold;
- letter-spacing: 0.2em;
+# letter-spacing: 0.2em;
}
h3 {
letter-spacing: normal;
- font-family: Arial, Helvetica, sans-serif;
+ font-family: sans-serif;
font-size: 12px;
+ font-weight: bold;
text-decoration: none;
margin: 0px;
}
@@ -50,15 +53,19 @@
text-decoration: none;
}
a:link {
+ color:#003399;
text-decoration: none;
}
a:visited {
- text-decoration: none;
+ color:#003399;
+ text-decoration: none;
}
a:hover {
- text-decoration: underline;
+ color:#003399;
+ text-decoration: underline;
}
a:active {
+ color:#003399;
text-decoration: underline;
}
@@ -82,7 +89,8 @@
}
div.entries {
- padding: 15px;
+ padding: 10px;
+# padding: 15px;
}
div.entry {
@@ -129,7 +137,7 @@
padding: 5px;
}
div.entriesBox {
- font-family: Arial, Helvetica, sans-serif;
+ font-family: sans-serif;
border-bottom-width: thin;
border-bottom-style: solid;
padding: 4px;
@@ -137,7 +145,7 @@
div.entryBoxPinned {
}
.entryTitle {
- font-family: Arial, Helvetica, sans-serif;
+ font-family: sans-serif;
font-weight: bold;
text-decoration: none;
font-size:130%;
@@ -145,7 +153,7 @@
padding:0px;
}
.entryDetails {
- font-family: Arial, Helvetica, sans-serif;
+ font-family: sans-serif;
text-decoration: none;
color: #777;
font-size:80%;
@@ -153,7 +161,7 @@
padding:0px;
}
.entryDescription {
- font-family: Arial, Helvetica, sans-serif;
+ font-family: sans-serif;
text-decoration: none;
}
@@ -164,7 +172,7 @@
}
input.searchButton {
cursor: hand;
- font-family: lucida,arial,sans-serif;
+ font-family: sans-serif;
height: 1.4em;
font-weight: bold;
font-size: 11px;
@@ -251,7 +259,8 @@
-------------------------------------------------------- */
#logobackground {
- background: #ad3431 !important;
+ # background: #ad3431 !important;
+ background: #FFF !important;
}
.bannerBox {
background: url("$url.resource("tan-banner.gif")") repeat-x top;
@@ -261,30 +270,38 @@
color: white;
}
.bannerStatusBox a {
- color: white;
+color:#003399;
+# color: white;
}
.bannerStatusBox a:link {
- color: white;
+color:#003399;
+# color: white;
}
.bannerStatusBox a:visited {
- color: white;
+color:#003399;
+# color: white;
}
h1 {
- color: #ad3537;
+color:#333;
+# color: #ad3537;
}
h2 {
- color: #ad3537;
+color:#333;
+ # color: #ad3537;
}
h3 {
background: transparent;
- color: #ad3537;
+color:#333;
+# color: #ad3537;
font-weight: bold;
}
a:link {
- color: #ad3537;
+color:#003399;
+# color: #ad3537;
}
a:visited {
- color: #ad3537;
+color:#003399;
+ # color: #ad3537;
}
div.yourWeblogBox {
@@ -292,7 +309,8 @@
}
input.searchButton {
color: white;
- background: #ad3431;
+ background: #FFF;
+# background: #ad3431;
}
.sidebarBodyHead {
background: #ad3431;
@@ -470,4 +488,4 @@
a.s2, a.s2:visited { font-size: 115%; color: #deafad ! important; }
a.s1, a.s1:visited { font-size: 110%; color: #f1dbdb ! important; }
-/* end css */
+/* end css */
\ No newline at end of file
Index: apps/weblogger/web/themes/frontpage/_footer.vm
===================================================================
--- apps/weblogger/web/themes/frontpage/_footer.vm (revision 578204)
+++ apps/weblogger/web/themes/frontpage/_footer.vm (working copy)
@@ -1,5 +1,5 @@
<div id="footer">
-Powered by <a href="http://roller.apache.org">Apache Roller</a> $config.rollerVersion |
+Powered by SocialFish (based on <a href="http://roller.apache.org">Apache Roller</a> $config.rollerVersion) |
<a href="http://opensource2.atlassian.com/projects/roller/">
Report an Issue</a> |
<a href="http://cwiki.apache.org/confluence/display/ROLLER/Roller+User+Documentation">
Index: apps/weblogger/web/WEB-INF/jsps/core/Login.jsp
===================================================================
--- apps/weblogger/web/WEB-INF/jsps/core/Login.jsp (revision 578204)
+++ apps/weblogger/web/WEB-INF/jsps/core/Login.jsp (working copy)
@@ -17,13 +17,26 @@
-->
<%-- Body of the login page, invoked from login.jsp --%>
-
+<%@ page import="org.apache.roller.weblogger.config.WebloggerConfig" %>
<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
+<%!
+String securityCheckUrl = null;
+boolean cmaEnabled = WebloggerConfig.getBooleanProperty("authentication.cma.enabled");
+%>
+
+<%
+if (cmaEnabled) {
+ securityCheckUrl = "/j_security_check";
+} else {
+ securityCheckUrl = "/roller_j_security_check";
+}
+%>
+
<p><s:text name="loginPage.prompt" /></p>
<form method="post" id="loginForm"
- action="<c:url value="/roller_j_security_check"/>"
+ action="<c:url value="<%= securityCheckUrl %>"/>"
onsubmit="saveUsername(this)">
<table>
Index: apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties
===================================================================
--- apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties (revision 578204)
+++ apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties (working copy)
@@ -88,7 +88,6 @@
bookmarksForm.delete.confirm=Delete selected bookmarks?
bookmarksForm.description=Description
bookmarksForm.folder=Bookmark Folder
-bookmarksForm.priority=Priority
bookmarksForm.edit=Edit
bookmarksForm.edit.tip=Click to edit this folder or bookmark
bookmarksForm.move=Move selected
@@ -290,7 +289,6 @@
commentManagement.bulkDeletePrompt1=Your query matched {0} comments,
commentManagement.bulkDeletePrompt2=delete them all?
commentManagement.confirmBulkDelete=Are you sure you want to delete all {0} selected by your query?
-commentManagement.deleteSuccess=Successfully deleted {0} comments
commentManagement.pendingStatus=Pending status
commentManagement.onlyPending=Pending only
@@ -633,7 +631,7 @@
# ---------------------------------------------------------------------- Footer
-footer.productName=Powered by <a href="http://roller.apache.org">Apache Roller Weblogger</a> Version {0}
+footer.productName=Powered by SocialFish (based on <a href="http://roller.apache.org">Apache Roller</a> {0})
footer.reportIssue=Report an Issue
footer.userGuide=User Guide
footer.macros=Macros
@@ -641,7 +639,7 @@
# ------------------------------------------------------ index / setup page
-index.heading=Welcome to Roller!
+index.heading=Welcome to SocialFish!
index.prompt=Follow these steps to finalize your Roller installation:
index.error=ERROR quering the Roller database, are you sure you ran the \
@@ -740,7 +738,6 @@
installer.bannerTitleRight=Auto-Installer
# database error
-installer.error.connection.pageTitle=Database connection error
installer.cannotConnectToDatabase=Cannot connect to database
installer.whatHappened=What happened?
installer.whatHappenedDatabaseConnectionError=\
@@ -756,7 +753,6 @@
To help you debug the problem, here is the stack trace for that exception:
# unknown error
-installer.error.unknown.pageTitle=Unknown error
installer.unknownError=An unknown error has occurred
installer.whatHappenedUnknown=An unknown and unexpected error occured when \
Roller tried to check database status or bootstrap itself. Roller can''t \
@@ -764,10 +760,9 @@
and diagnose the problem yourself. Follow the instructons on the Roller wiki \
and seek help from the <a href=\
"http://cwiki.apache.org/confluence/display/ROLLER/Roller+Mailing+Lists"> \
-Roller user mailing list</a>.
+Roller user mailing list.
# create tables
-installer.database.creation.pageTitle=Database table creation
installer.noDatabaseTablesFound=No database tables found
installer.noDatabaseTablesExplanation=\
Roller is able to connect to your database of type [{0}], but found no tables.
@@ -787,7 +782,6 @@
issued during the creation process:
# upgrade tables
-installer.database.upgrade.pageTitle=Database table upgrade
installer.databaseUpgradeNeeded=Database tables need to be upgraded
installer.databaseUpgradeNeededExplanation=\
Roller is able to connect to your database of type [{0}] and found tables, \
@@ -839,7 +833,6 @@
macro.searchresults.hits_2=try this same search</a> on \
<a href="http://google.com">Google</a>.</em>
macro.searchresults.again=Search Again
-macro.searchresults.incategory=- In Category -
error.searchProblem=There was a problem with your search.
@@ -1201,9 +1194,6 @@
ConfigForm.proxyHost=Proxy host for feed fetcher
ConfigForm.proxyPort=Proxy port for feed fetcher
-ConfigForm.message.saveSucceeded=Saved Planet configuration
-ConfigForm.error.saveFailed=Error saving Planet configuration
-
planetConfig.title.control=Experimental Planet Control
planetConfig.prompt.control=Launch background tasks (for testing purposes only)
@@ -1758,17 +1748,16 @@
weblogEdit.trackbackErrorParsing=Trackback failed, url indicated success but response message was improperly formatted. Response was: {0}
weblogEdit.trackbackError404=Trackback failed, could not reach trackback url. Are you sure you put in the right url?
-weblogEdit.hasComments=<a href="{0}">Comments [{1}]</a>
+weblogEdit.hasComments=Comments [{0}]
weblogEdit.enclosureURL=Enclosure URL
weblogEdit.enclosureType=Type
-weblogEdit.enclosureLength=Length
+weblogEdit.encosureLegnth=Length
weblogEdit.encosureInvalid=Enclosure URL is invalid
weblogEdit.mediaCastFailedFetchingInfo=Unable to reach the enclosure. Check the hostname in the URL.
weblogEdit.mediaCastUrlMalformed=The enclosure URL was malformed.
weblogEdit.mediaCastResponseError=The enclosure server returned an error. Do you have the right URL?
weblogEdit.mediaCastLacksContentTypeOrLength=Unable to use enclosure URL. Server provided no content type or no length.
-weblogEdit.mediaCastErrorRemoving=Error removing MediaCast from weblog entry
weblogEdit.error.incompleteEntry=Entry must have a title
# errors from validation
@@ -1955,7 +1944,7 @@
websiteSettings.commentSettings=Comments
websiteSettings.allowComments=Allow Comments for your weblog?
websiteSettings.moderateComments=Moderate comments
-websiteSettings.emailComments=Email notification of comments?
+websiteSettings.emailComments=Email Comments?
websiteSettings.emailFromAddress=Default <em>from</em> e-mail address for notifications
websiteSettings.commentsOffForInactiveWeblog=Turned comments off for inactive weblog
@@ -1969,8 +1958,8 @@
# --- Weblog API
websiteSettings.bloggerApi=Weblog Client API
-websiteSettings.enableBloggerApi=Enable weblog client support?
-websiteSettings.bloggerApiCategory=Category for posts received via clients
+websiteSettings.enableBloggerApi=Enable Blogger and MetaWeblog APIs for your weblog?
+websiteSettings.bloggerApiCategory=Category for posts received via Blogger API
# --- Formatting
@@ -2027,7 +2016,7 @@
# ------------------------------------------------------------- Welcome new user
-welcome.title=Welcome to Roller
+welcome.title=Welcome to SocialFish
welcome.accountCreated=Your new user account has been created.
welcome.addressIs=Your new Weblog''s address is
welcome.rssAddressIs=Your main newsfeed address is
@@ -2047,7 +2036,7 @@
# ---------------------------------------------------------------- Your Weblogs
yourWebsites.title=Main Menu
-yourWebsites.subtitle=Welcome to Roller
+yourWebsites.subtitle=Welcome to SocialFish
yourWebsites.actions=Actions
Index: apps/weblogger/web/roller-ui/theme/sun/colors.css
===================================================================
--- apps/weblogger/web/roller-ui/theme/sun/colors.css (revision 578204)
+++ apps/weblogger/web/roller-ui/theme/sun/colors.css (working copy)
@@ -20,11 +20,25 @@
/* ------------------------------------------------------------------------ */
/* add colors and images to roller.css */
+BODY, TH, TD, P, DIV, SPAN, INPUT, SELECT, TEXTAREA, FORM, B, STRONG, I, U, H1, H2, H3, H4, H5, H6,
+ DL, DD, DT, UL, LI, OL, OPTION, OPTGROUP, A {font-family:sans-serif;font-size:12px}
+H1 {font-family:sans-serif;font-weight:bold;font-size:18px}
+H2 {font-family:sans-serif;font-weight:bold;font-size:15px}
+H3, H4 {font-family:sans-serif;font-weight:bold;font-size:12px}
+H5, H6 {font-family:sans-serif;font-weight:bold;font-size:11px}
+.DefBdy {color:#333;background-color:#FFF;margin:0px}
+a:link {color:#003399;text-decoration:none}
+a:visited {color:#003399;text-decoration:none}
+a:hover {color:#003399;text-decoration:underline}
+a:active {color:#003399;text-decoration:none}
+.ConMgn {margin:0px 10px}
+
#logobackground {
background: #e77100 !important;
}
+
.bannerBox {
- background: url("two-banner.gif") repeat-x top;
+ background: url("dot.gif") repeat-x top;
border-bottom: 2px black solid;
color: #666666;
}
@@ -36,54 +50,28 @@
border: none;
color: #5d7992;
}
-h1 {
- color: #e77100;
-}
-h2 {
- color: #e77100;
-}
-h3 {
- color: black;
-}
+
p.subtitle {
color: #000000;
}
.subtitle span {
color: #52829c;
}
-a {
- color: #35556B;
-}
-a:link {
- color: #35556B;
-}
-a:visited {
- color: #35556B;
-}
-a:hover {
- color: #35556B;
-}
-a:active {
- color: #35556B;
-}
-table.rollertable th, table.rollertable th {
- background: #52829c;
-}
-table.rollertable td, table.rollertable tbody td {
- border: 1px solid #52829c;
-}
-div.centerTitle {
- background: #dee7ef;
-}
-div.control {
- background: #dee7ef;
-}
-div.controlToggle {
- background: url("two-togglegrey.gif") repeat-x top;
-}
+
+/* TABLE */
+table.rollertable{background-color:#BEC7CC;color:#333;width:100%;padding:6px;border-right:none;border-bottom:none;empty-cells:show}
+table.rollertable tbody td, table.rollertable td {border-right:solid 1px #BEC7CC;border-bottom:solid 1px #BEC7CC;border-left:none;border-top:none;padding:4px 5px 1px 5px;background-color:#fff}
+table.rollertable th{border-right:solid 1px #BEC7CC;border-bottom:solid 1px #BEC7CC;border-left:none;border-top:none;padding:3px 5px 1px 5px;background-color:#fff;font-weight:normal}
+
+div.centerTitle {background-color:#CCC}
+
+div.control {padding-left:10px;padding-top:5px;padding-bottom:3px}
+div.controlToggle {padding-left:7px;padding-right:3px;padding-bottom:2px;border-left:3px solid #E5E5E5;border-top:3px solid #E5E5E5;border-right:3px solid #E5E5E5}
+
div.entriesBox {
background: #e3e3e3;
}
+
div.entryTitleBox {
color: #35556B;
background: #dee7ef;