You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2006/02/07 16:37:04 UTC
svn commit: r375629 [2/2] - in
/incubator/roller/trunk/sandbox/atomadminprotocol: ./ src/ src/org/
src/org/roller/ src/org/roller/presentation/
src/org/roller/presentation/atomadminapi/ test/
Added: incubator/roller/trunk/sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/WSSEUtilities.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/WSSEUtilities.java?rev=375629&view=auto
==============================================================================
--- incubator/roller/trunk/sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/WSSEUtilities.java (added)
+++ incubator/roller/trunk/sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/WSSEUtilities.java Tue Feb 7 07:37:00 2006
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2005, Dave Johnson
+ *
+ * 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.roller.presentation.atomadminapi;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.commons.codec.binary.Base64;
+
+/**
+ * Utilties to support WSSE authentication.
+ * @author Dave Johnson
+ */
+class WSSEUtilities {
+ public static synchronized String generateDigest(
+ byte[] nonce, byte[] created, byte[] password) {
+ String result = null;
+ try {
+ MessageDigest digester = MessageDigest.getInstance("SHA");
+ digester.reset();
+ digester.update(nonce);
+ digester.update(created);
+ digester.update(password);
+ byte[] digest = digester.digest();
+ result = new String(base64Encode(digest));
+ }
+ catch (NoSuchAlgorithmException e) {
+ result = null;
+ }
+ return result;
+ }
+ public static byte[] base64Decode(String value) throws IOException {
+ return Base64.decodeBase64(value.getBytes("UTF-8"));
+ }
+ public static String base64Encode(byte[] value) {
+ return new String(Base64.encodeBase64(value));
+ }
+ public static String generateWSSEHeader(String userName, String password)
+ throws UnsupportedEncodingException {
+
+ byte[] nonceBytes = Long.toString(new Date().getTime()).getBytes();
+ String nonce = new String(WSSEUtilities.base64Encode(nonceBytes));
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+ String created = sdf.format(new Date());
+
+ String digest = WSSEUtilities.generateDigest(
+ nonceBytes, created.getBytes("UTF-8"), password.getBytes("UTF-8"));
+
+ StringBuffer header = new StringBuffer("UsernameToken Username=\"");
+ header.append(userName);
+ header.append("\", ");
+ header.append("PasswordDigest=\"");
+ header.append(digest);
+ header.append("\", ");
+ header.append("Nonce=\"");
+ header.append(nonce);
+ header.append("\", ");
+ header.append("Created=\"");
+ header.append(created);
+ header.append("\"");
+ return header.toString();
+ }
+}
Added: incubator/roller/trunk/sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/WeblogEntry.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/WeblogEntry.java?rev=375629&view=auto
==============================================================================
--- incubator/roller/trunk/sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/WeblogEntry.java (added)
+++ incubator/roller/trunk/sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/WeblogEntry.java Tue Feb 7 07:37:00 2006
@@ -0,0 +1,243 @@
+/*
+ * WeblogEntry.java
+ *
+ * Created on January 17, 2006, 12:44 PM
+ */
+
+package org.roller.presentation.atomadminapi;
+
+import java.util.Date;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.Text;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.atomadminapi.Entry.Types;
+
+/**
+ *
+ * @author jtb
+ */
+class WeblogEntry extends Entry {
+ static interface Tags {
+ public static final String WEBLOG = "weblog";
+ public static final String HANDLE = "handle";
+ public static final String NAME = "name";
+ public static final String DESCRIPTION = "description";
+ public static final String LOCALE = "locale";
+ public static final String TIMEZONE = "timezone";
+ public static final String DATE_CREATED = "date-created";
+ public static final String CREATING_USER = "creating-user";
+ public static final String EMAIL_ADDRESS = "email-address";
+ }
+
+ private String handle;
+ private String name;
+ private String description;
+ private String locale;
+ private String timezone;
+ private Date dateCreated;
+ private String creatingUser;
+ private String emailAddress;
+
+ public WeblogEntry(Element e, String urlPrefix) throws Exception {
+ // handle
+ Element handleElement = e.getChild(Tags.HANDLE, AtomAdminService.NAMESPACE);
+ if (handleElement == null) {
+ throw new Exception("ERROR: Missing element: " + Tags.HANDLE);
+ }
+ setHandle(handleElement.getText());
+ String href = urlPrefix + "/" + EntrySet.Types.WEBLOGS + "/" + getHandle();
+ setHref(href);
+
+ // name
+ Element nameElement = e.getChild(Tags.NAME, AtomAdminService.NAMESPACE);
+ if (nameElement == null) {
+ throw new Exception("ERROR: Missing element: " + Tags.NAME);
+ }
+ setName(nameElement.getText());
+
+ // description
+ Element descElement = e.getChild(Tags.DESCRIPTION, AtomAdminService.NAMESPACE);
+ if (descElement == null) {
+ throw new Exception("ERROR: Missing element: " + Tags.DESCRIPTION);
+ }
+ setDescription(descElement.getText());
+
+ // locale
+ Element localeElement = e.getChild(Tags.LOCALE, AtomAdminService.NAMESPACE);
+ if (localeElement == null) {
+ throw new Exception("ERROR: Missing element: " + Tags.LOCALE);
+ }
+ setLocale(localeElement.getText());
+
+ // timezone
+ Element tzElement = e.getChild(Tags.TIMEZONE, AtomAdminService.NAMESPACE);
+ if (tzElement == null) {
+ throw new Exception("ERROR: Missing element: " + Tags.TIMEZONE);
+ }
+ setTimezone(tzElement.getText());
+
+ // creator
+ Element creatorElement = e.getChild(Tags.CREATING_USER, AtomAdminService.NAMESPACE);
+ if (creatorElement == null) {
+ throw new Exception("ERROR: Missing element: " + Tags.CREATING_USER);
+ }
+ setCreatingUser(creatorElement.getText());
+
+ // email address
+ Element emailElement = e.getChild(Tags.EMAIL_ADDRESS, AtomAdminService.NAMESPACE);
+ if (emailElement == null) {
+ throw new Exception("ERROR: Missing element: " + Tags.EMAIL_ADDRESS);
+ }
+ setEmailAddress(emailElement.getText());
+
+ // created (optional)
+ Element createdElement = e.getChild(Tags.DATE_CREATED, AtomAdminService.NAMESPACE);
+ if (createdElement != null) {
+ setDateCreated(new Date(Long.valueOf(createdElement.getText()).longValue()));
+ }
+ }
+
+ public WeblogEntry(WebsiteData wd, String urlPrefix) {
+ String href = urlPrefix + "/" + EntrySet.Types.WEBLOGS + "/" + wd.getHandle();
+
+ setHref(href);
+ setHandle(wd.getHandle());
+ setName(wd.getName());
+ setDescription(wd.getDescription());
+ setLocale(wd.getLocale());
+ setTimezone(wd.getTimeZone());
+ setCreatingUser(wd.getCreator().getUserName());
+ setEmailAddress(wd.getEmailAddress());
+ setDateCreated(wd.getDateCreated());
+ }
+
+ public String getType() {
+ return Types.WEBLOG;
+ }
+
+ public Document toDocument() {
+ Element weblog = new Element(Tags.WEBLOG, AtomAdminService.NAMESPACE);
+ Document doc = new Document(weblog);
+
+ // link
+ weblog.setAttribute(Attributes.HREF, getHref());
+
+ // handle
+ Element handle = new Element(Tags.HANDLE, AtomAdminService.NAMESPACE);
+ Text handleText = new Text(getHandle());
+ handle.addContent(handleText);
+ weblog.addContent(handle);
+
+ // name
+ Element name = new Element(Tags.NAME, AtomAdminService.NAMESPACE);
+ Text nameText = new Text(getName());
+ name.addContent(nameText);
+ weblog.addContent(name);
+
+ // description
+ Element desc = new Element(Tags.DESCRIPTION, AtomAdminService.NAMESPACE);
+ Text descText = new Text(getDescription());
+ desc.addContent(descText);
+ weblog.addContent(desc);
+
+ // locale
+ Element locale = new Element(Tags.LOCALE, AtomAdminService.NAMESPACE);
+ Text localeText = new Text(getLocale());
+ locale.addContent(localeText);
+ weblog.addContent(locale);
+
+ // timezone
+ Element tz = new Element(Tags.TIMEZONE, AtomAdminService.NAMESPACE);
+ Text tzText = new Text(getTimezone());
+ tz.addContent(tzText);
+ weblog.addContent(tz);
+
+ // creating user
+ Element creator = new Element(Tags.CREATING_USER, AtomAdminService.NAMESPACE);
+ Text creatorText = new Text(String.valueOf(getCreatingUser()));
+ creator.addContent(creatorText);
+ weblog.addContent(creator);
+
+ // email address
+ Element email = new Element(Tags.EMAIL_ADDRESS, AtomAdminService.NAMESPACE);
+ Text emailText = new Text(String.valueOf(getEmailAddress()));
+ email.addContent(emailText);
+ weblog.addContent(email);
+
+ // creation date (optional)
+ Element created = new Element(Tags.DATE_CREATED, AtomAdminService.NAMESPACE);
+ Date datedCreated = getDateCreated();
+ if (dateCreated != null) {
+ Text createdText = new Text(String.valueOf(dateCreated.getTime()));
+ created.addContent(createdText);
+ weblog.addContent(created);
+ }
+
+ return doc;
+ }
+
+ public String getHandle() {
+ return handle;
+ }
+
+ public void setHandle(String handle) {
+ this.handle = handle;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getLocale() {
+ return locale;
+ }
+
+ public void setLocale(String locale) {
+ this.locale = locale;
+ }
+
+ public String getTimezone() {
+ return timezone;
+ }
+
+ public void setTimezone(String timezone) {
+ this.timezone = timezone;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Date getDateCreated() {
+ return dateCreated;
+ }
+
+ public void setDateCreated(Date dateCreated) {
+ this.dateCreated = dateCreated;
+ }
+
+ public String getCreatingUser() {
+ return creatingUser;
+ }
+
+ public void setCreatingUser(String creatingUser) {
+ this.creatingUser = creatingUser;
+ }
+
+ public String getEmailAddress() {
+ return emailAddress;
+ }
+
+ public void setEmailAddress(String emailAddress) {
+ this.emailAddress = emailAddress;
+ }
+}
Added: incubator/roller/trunk/sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/WeblogEntrySet.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/WeblogEntrySet.java?rev=375629&view=auto
==============================================================================
--- incubator/roller/trunk/sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/WeblogEntrySet.java (added)
+++ incubator/roller/trunk/sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/WeblogEntrySet.java Tue Feb 7 07:37:00 2006
@@ -0,0 +1,84 @@
+/*
+ * WeblogEntrySet.java
+ *
+ * Created on January 17, 2006, 12:44 PM
+ */
+
+package org.roller.presentation.atomadminapi;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.roller.pojos.PermissionsData;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.atomadminapi.EntrySet.Types;
+
+/**
+ * This class describes a set of weblog entries.
+ * @author jtb
+ */
+class WeblogEntrySet extends EntrySet {
+ static interface Tags {
+ public static final String WEBLOGS = "weblogs";
+ }
+
+ public WeblogEntrySet(UserData[] users, String urlPrefix) {
+ if (users == null) {
+ throw new NullPointerException("null users not allowed");
+ }
+
+ List entries = new ArrayList();
+ for (int i = 0; i < users.length; i++) {
+ UserData ud = users[i];
+ List permissions = ud.getPermissions();
+ for (Iterator j = permissions.iterator(); j.hasNext(); ) {
+ PermissionsData pd = (PermissionsData)j.next();
+ WebsiteData wd = pd.getWebsite();
+ WeblogEntry entry = new WeblogEntry(wd, urlPrefix);
+ entries.add(entry);
+ }
+ }
+ setEntries((Entry[])entries.toArray(new Entry[0]));
+ setHref(urlPrefix + "/" + Types.WEBLOGS);
+ }
+
+ public WeblogEntrySet(Document d, String urlPrefix) throws Exception {
+ Element root = d.getRootElement();
+ String rootName = root.getName();
+ if (!rootName.equals(Tags.WEBLOGS)) {
+ throw new Exception("ERROR: Expected root name: " + Tags.WEBLOGS + ", root name was: " + rootName);
+ }
+ List weblogs = root.getChildren(WeblogEntry.Tags.WEBLOG, AtomAdminService.NAMESPACE);
+ if (weblogs != null) {
+ List entries = new ArrayList();
+ for (Iterator i = weblogs.iterator(); i.hasNext(); ) {
+ Element weblog = (Element)i.next();
+ WeblogEntry entry = new WeblogEntry(weblog, urlPrefix);
+ entries.add(entry);
+ }
+ setEntries((Entry[])entries.toArray(new Entry[0]));
+ }
+ setHref(urlPrefix + "/" + Types.WEBLOGS);
+ }
+
+ public WeblogEntrySet(WebsiteData[] wds, String urlPrefix) {
+ if (wds == null) {
+ throw new NullPointerException("null website datas not allowed");
+ }
+
+ List entries = new ArrayList();
+ for (int i = 0; i < wds.length; i++) {
+ WeblogEntry entry = new WeblogEntry(wds[i], urlPrefix);
+ entries.add(entry);
+ }
+ setEntries((Entry[])entries.toArray(new Entry[0]));
+ setHref(urlPrefix + "/" + Types.WEBLOGS);
+ }
+
+ public String getType() {
+ return Types.WEBLOGS;
+ }
+}
Added: incubator/roller/trunk/sandbox/atomadminprotocol/test/member-test1.xml
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/sandbox/atomadminprotocol/test/member-test1.xml?rev=375629&view=auto
==============================================================================
--- incubator/roller/trunk/sandbox/atomadminprotocol/test/member-test1.xml (added)
+++ incubator/roller/trunk/sandbox/atomadminprotocol/test/member-test1.xml Tue Feb 7 07:37:00 2006
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<members xmlns="http://purl.org/atom/aapp#">
+ <member>
+ <name>test1</name>
+ <handle>test2</handle>
+ <permission>AUTHOR</permission>
+ </member>
+</members>
Added: incubator/roller/trunk/sandbox/atomadminprotocol/test/member-test2.xml
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/sandbox/atomadminprotocol/test/member-test2.xml?rev=375629&view=auto
==============================================================================
--- incubator/roller/trunk/sandbox/atomadminprotocol/test/member-test2.xml (added)
+++ incubator/roller/trunk/sandbox/atomadminprotocol/test/member-test2.xml Tue Feb 7 07:37:00 2006
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<members xmlns="http://purl.org/atom/aapp#">
+ <member>
+ <name>test2</name>
+ <handle>test1</handle>
+ <permission>AUTHOR</permission>
+ </member>
+</members>
Added: incubator/roller/trunk/sandbox/atomadminprotocol/test/user-test1.xml
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/sandbox/atomadminprotocol/test/user-test1.xml?rev=375629&view=auto
==============================================================================
--- incubator/roller/trunk/sandbox/atomadminprotocol/test/user-test1.xml (added)
+++ incubator/roller/trunk/sandbox/atomadminprotocol/test/user-test1.xml Tue Feb 7 07:37:00 2006
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<users xmlns="http://purl.org/atom/aapp#">
+ <user>
+ <name>test1</name>
+ <full-name>Test One</full-name>
+ <password>test1</password>
+ <locale>en</locale>
+ <timezone>US/Pacific</timezone>
+ <email-address>test1@test.com</email-address>
+ </user>
+</users>
Added: incubator/roller/trunk/sandbox/atomadminprotocol/test/user-test2.xml
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/sandbox/atomadminprotocol/test/user-test2.xml?rev=375629&view=auto
==============================================================================
--- incubator/roller/trunk/sandbox/atomadminprotocol/test/user-test2.xml (added)
+++ incubator/roller/trunk/sandbox/atomadminprotocol/test/user-test2.xml Tue Feb 7 07:37:00 2006
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<users xmlns="http://purl.org/atom/aapp#">
+ <user>
+ <name>test2</name>
+ <full-name>Test Two</full-name>
+ <password>test2</password>
+ <locale>en</locale>
+ <timezone>US/Pacific</timezone>
+ <email-address>test2@test.com</email-address>
+ </user>
+</users>
Added: incubator/roller/trunk/sandbox/atomadminprotocol/test/weblog-test1.xml
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/sandbox/atomadminprotocol/test/weblog-test1.xml?rev=375629&view=auto
==============================================================================
--- incubator/roller/trunk/sandbox/atomadminprotocol/test/weblog-test1.xml (added)
+++ incubator/roller/trunk/sandbox/atomadminprotocol/test/weblog-test1.xml Tue Feb 7 07:37:00 2006
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<weblogs xmlns="http://purl.org/atom/aapp#">
+ <weblog>
+ <handle>test1</handle>
+ <name>Test 1</name>
+ <description>Test 1</description>
+ <locale>en</locale>
+ <timezone>US/Pacific</timezone>
+ <creating-user>test1</creating-user>
+ <email-address>test1@test.com</email-address>
+ </weblog>
+</weblogs>
Added: incubator/roller/trunk/sandbox/atomadminprotocol/test/weblog-test2.xml
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/sandbox/atomadminprotocol/test/weblog-test2.xml?rev=375629&view=auto
==============================================================================
--- incubator/roller/trunk/sandbox/atomadminprotocol/test/weblog-test2.xml (added)
+++ incubator/roller/trunk/sandbox/atomadminprotocol/test/weblog-test2.xml Tue Feb 7 07:37:00 2006
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<weblogs xmlns="http://purl.org/atom/aapp#">
+ <weblog>
+ <handle>test2</handle>
+ <name>Test 2</name>
+ <description>Test 2</description>
+ <locale>en</locale>
+ <timezone>US/Pacific</timezone>
+ <creating-user>test2</creating-user>
+ <email-address>test2@test.com</email-address>
+ </weblog>
+</weblogs>