Author: lmoren
Date: Wed Jul 14 21:34:19 2010
New Revision: 964214

URL: http://svn.apache.org/viewvc?rev=964214&view=rev
Log:
New OAuth Data Provider

Added:
    
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfo.java
   (with props)
    
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfoImpl.java
   (with props)
    
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProvider.java
   (with props)
    
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProviderImpl.java
   (with props)

Added: 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfo.java
URL: 
http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfo.java?rev=964214&view=auto
==============================================================================
--- 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfo.java
 (added)
+++ 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfo.java
 Wed Jul 14 21:34:19 2010
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.cxf.auth.oauth.provider;
+
+/**
+ * @author Lukasz Moren
+ */
+public interface ClientAuthenticationInfo {
+    //oauth calbackurl "out of band" parameter
+    public static final String OAUTH_OOB = "oob";
+
+    String getConsumerKey();
+
+    String getSecretKey();
+
+    String getCallbackURL();
+
+    void setCallbackURL(String callbackURL);
+
+    String getApplicationName();
+}

Propchange: 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfo.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfoImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfoImpl.java?rev=964214&view=auto
==============================================================================
--- 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfoImpl.java
 (added)
+++ 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfoImpl.java
 Wed Jul 14 21:34:19 2010
@@ -0,0 +1,106 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.cxf.auth.oauth.provider;
+
+/**
+ * @author Lukasz Moren
+ */
+public class ClientAuthenticationInfoImpl implements ClientAuthenticationInfo {
+    private String consumerKey;
+    private String secretKey;
+    private String callbackURL;
+    private String applicationName;
+
+    public ClientAuthenticationInfoImpl(String consumerKey, String secretKey, 
String callbackURL,
+                                        String applicationName) {
+        this.consumerKey = consumerKey;
+        this.secretKey = secretKey;
+        this.callbackURL = callbackURL;
+        this.applicationName = applicationName;
+    }
+
+    public ClientAuthenticationInfoImpl(String consumerKey, String secretKey, 
String callbackURL) {
+        this(consumerKey, secretKey, callbackURL, null);
+    }
+
+    public ClientAuthenticationInfoImpl(String consumerKey, String secretKey) {
+        this(consumerKey, secretKey, null);
+    }
+
+    public String getConsumerKey() {
+        return consumerKey;
+    }
+
+    public String getSecretKey() {
+        return secretKey;
+    }
+
+    public String getCallbackURL() {
+        return callbackURL;
+    }
+
+    public void setCallbackURL(String callbackURL) {
+        this.callbackURL = callbackURL;
+    }
+
+    public String getApplicationName() {
+        return applicationName;
+    }
+
+    public void setApplicationName(String applicationName) {
+        this.applicationName = applicationName;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        ClientAuthenticationInfoImpl that = (ClientAuthenticationInfoImpl)o;
+
+        if (applicationName != null ? 
!applicationName.equals(that.applicationName)
+            : that.applicationName != null) {
+            return false;
+        }
+        if (callbackURL != null ? !callbackURL.equals(that.callbackURL) : 
that.callbackURL != null) {
+            return false;
+        }
+        if (!consumerKey.equals(that.consumerKey)) {
+            return false;
+        }
+        if (!secretKey.equals(that.secretKey)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = consumerKey.hashCode();
+        result = 31 * result + secretKey.hashCode();
+        result = 31 * result + (callbackURL != null ? callbackURL.hashCode() : 
0);
+        result = 31 * result + (applicationName != null ? 
applicationName.hashCode() : 0);
+        return result;
+    }
+}

Propchange: 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfoImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfoImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProvider.java
URL: 
http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProvider.java?rev=964214&view=auto
==============================================================================
--- 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProvider.java
 (added)
+++ 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProvider.java
 Wed Jul 14 21:34:19 2010
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.cxf.auth.oauth.provider;
+
+import net.oauth.OAuthProblemException;
+
+/**
+ * @author Lukasz Moren
+ */
+//todo add client credentials checking
+public interface OAuthDataProvider {
+    ClientAuthenticationInfo getClientAuthenticationInfo(String consumerKey) 
throws OAuthProblemException;
+
+    RequestToken generateRequestToken(ClientAuthenticationInfo authInfo);
+
+    AccessToken generateAccessToken(RequestToken requestToken);
+
+    AccessToken getAccessToken(String accessToken) throws 
OAuthProblemException;
+
+    RequestToken getRequestToken(String tokenString, String oauthVerifier) 
throws OAuthProblemException;
+
+    RequestToken validateRequestToken(String requestToken, String 
securityToken) throws OAuthProblemException;
+
+    RequestToken saveSecurityToken(String requestToken);
+
+}

Propchange: 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProviderImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProviderImpl.java?rev=964214&view=auto
==============================================================================
--- 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProviderImpl.java
 (added)
+++ 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProviderImpl.java
 Wed Jul 14 21:34:19 2010
@@ -0,0 +1,176 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.cxf.auth.oauth.provider;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.cxf.auth.oauth.utils.OAuthUtils;
+import org.apache.cxf.auth.oauth.validation.OAuthMessageValidator;
+
+import net.oauth.OAuth;
+import net.oauth.OAuthProblemException;
+
+
+/**
+ * @author Lukasz Moren
+ */
+public class OAuthDataProviderImpl implements OAuthDataProvider {
+
+    private Map<String, ClientAuthenticationInfo> clientAuthInfo
+        = new ConcurrentHashMap<String, ClientAuthenticationInfo>();
+
+    private Map<String, Token> oauthTokens
+        = new ConcurrentHashMap<String, Token>();
+
+    public ClientAuthenticationInfo getClientAuthenticationInfo(String 
consumerKey)
+        throws OAuthProblemException {
+        ClientAuthenticationInfo authenticationInfo = 
clientAuthInfo.get(consumerKey);
+
+        //client credentials not found
+        if (authenticationInfo == null) {
+            OAuthProblemException problemEx = new OAuthProblemException(
+                OAuth.Problems.CONSUMER_KEY_UNKNOWN);
+            problemEx
+                .setParameter(OAuthProblemException.HTTP_STATUS_CODE, 
HttpServletResponse.SC_UNAUTHORIZED);
+            throw problemEx;
+        }
+        return authenticationInfo;
+    }
+
+    public RequestToken generateRequestToken(ClientAuthenticationInfo 
clientAuthenticationInfo) {
+        String token = OAuthUtils.generateToken();
+        String tokenSecret = OAuthUtils.generateToken();
+
+        RequestToken reqToken = new RequestToken(clientAuthenticationInfo, 
token, tokenSecret);
+
+        oauthTokens.put(token, reqToken);
+        return reqToken;
+    }
+
+    public RequestToken saveSecurityToken(String requestToken) {
+        Token token = oauthTokens.get(requestToken);
+
+        if (token == null) {
+            return null;
+        }
+
+        if (RequestToken.class.isAssignableFrom(token.getClass())) {
+            RequestToken req = (RequestToken)token;
+            req.setSecurityToken(generateSecurityToken());
+            oauthTokens.put(requestToken, req);
+
+            return req;
+        }
+        return null;
+    }
+
+    public RequestToken validateRequestToken(String requestTokenString, String 
securityToken)
+        throws OAuthProblemException {
+        Token token = oauthTokens.get(requestTokenString);
+
+        if (token == null || 
!RequestToken.class.isAssignableFrom(token.getClass())) {
+            return handleTokenRejectedException();
+        }
+
+        RequestToken requestToken = (RequestToken)token;
+        if (!validateSecurityToken(requestToken.getSecurityToken(), 
securityToken)) {
+            throw new 
OAuthProblemException(OAuth.Problems.ADDITIONAL_AUTHORIZATION_REQUIRED);
+        }
+
+        requestToken.setOauthVerifier(generateOAuthVerifier());
+
+        return requestToken;
+    }
+
+    public RequestToken getRequestToken(String tokenString, String 
oauthVerifier)
+        throws OAuthProblemException {
+        Token token = oauthTokens.get(tokenString);
+        if (token == null || 
(!RequestToken.class.isAssignableFrom(token.getClass()))) {
+            handleTokenRejectedException();
+        }
+        RequestToken requestToken = (RequestToken)token;
+
+        String expectedVerifier = null;
+        if (requestToken != null) {
+            expectedVerifier = requestToken.getOauthVerifier();
+        }
+        if (expectedVerifier == null || 
!expectedVerifier.equals(oauthVerifier)) {
+            OAuthProblemException problemEx = new OAuthProblemException(
+                OAuthMessageValidator.VERIFIER_INVALID);
+            problemEx
+                .setParameter(OAuthProblemException.HTTP_STATUS_CODE, 
HttpServletResponse.SC_UNAUTHORIZED);
+            throw problemEx;
+        }
+
+        return requestToken;
+    }
+
+    public AccessToken generateAccessToken(RequestToken requestToken) {
+        String accessTokenString = OAuthUtils.generateToken();
+        String tokenSecretString = OAuthUtils.generateToken();
+        AccessToken accessToken = new 
AccessToken(requestToken.getClientAuthenticationInfo(),
+            accessTokenString, tokenSecretString);
+
+        //todo mt correctness??
+        oauthTokens.remove(requestToken.getTokenString());
+        oauthTokens.put(accessTokenString, accessToken);
+
+        return accessToken;
+    }
+
+    public AccessToken getAccessToken(String accessToken) throws 
OAuthProblemException {
+        Token token = oauthTokens.get(accessToken);
+        if (token == null || 
!AccessToken.class.isAssignableFrom(token.getClass())) {
+            handleTokenRejectedException();
+        }
+
+        return (AccessToken)token;
+    }
+
+    private RequestToken handleTokenRejectedException() throws 
OAuthProblemException {
+        OAuthProblemException problemEx = new OAuthProblemException(
+            OAuth.Problems.TOKEN_REJECTED);
+        problemEx
+            .setParameter(OAuthProblemException.HTTP_STATUS_CODE, 
HttpServletResponse.SC_UNAUTHORIZED);
+        throw problemEx;
+    }
+
+    private boolean validateSecurityToken(String securityToken, String 
expSecurityToken) {
+        return securityToken.equals(expSecurityToken);
+    }
+
+    protected String generateSecurityToken() {
+        return OAuthUtils.generateToken();
+    }
+
+    protected String generateOAuthVerifier() {
+        return OAuthUtils.generateToken();
+    }
+
+    public Map<String, ClientAuthenticationInfo> getClientAuthInfo() {
+        return clientAuthInfo;
+    }
+
+    public void setClientAuthInfo(Map<String, ClientAuthenticationInfo> 
clientAuthInfo) {
+        this.clientAuthInfo = clientAuthInfo;
+    }
+}

Propchange: 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProviderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProviderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date


Reply via email to