yesod-auth-oauth (empty) → 0.1
raw patch · 4 files changed
+175/−0 lines, 4 filesdep +basedep +hoauthdep +yesodsetup-changed
Dependencies added: base, hoauth, yesod, yesod-auth
Files
- LICENSE +30/−0
- Setup.hs +2/−0
- Yesod/Helpers/Auth/OAuth.hs +84/−0
- yesod-auth-oauth.cabal +59/−0
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c)2011, Hiromi ISHII++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Hiromi ISHII nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ Yesod/Helpers/Auth/OAuth.hs view
@@ -0,0 +1,84 @@+{-# LANGUAGE CPP, QuasiQuotes #-}+module Yesod.Helpers.Auth.OAuth+ ( authOAuth+ , oauthUrl+ , authTwitter+ ) where+import Yesod+import Yesod.Helpers.Auth+import Network.OAuth.Consumer+import Network.OAuth.Http.Request hiding (replace)+import qualified Network.OAuth.Http.Request as OA+import Network.OAuth.Http.CurlHttpClient+import Data.Maybe++oauthUrl :: AuthRoute+oauthUrl = PluginR "oauth" ["forward"]++authOAuth :: YesodAuth m =>+ String -- ^ Service Name+ -> String -- ^ OAuth Parameter Name to use for identify+ -> String -- ^ Request URL+ -> String -- ^ Access Token URL+ -> String -- ^ Authorize URL+ -> String -- ^ Consumer Key+ -> String -- ^ Consumer Secret+ -> AuthPlugin m+authOAuth name ident reqUrl accUrl authUrl key sec = AuthPlugin name dispatch login+ where+ url = PluginR name []+ dispatch "GET" ["forward"] = do+ render <- getUrlRender+ tm <- getRouteToMaster+ let app = Application key sec (URL $ render $ tm url)+ tok <- runOAuthM (fromApplication app) $ do+ signRq2 HMACSHA1 Nothing (fromJust . parseURL $ reqUrl) >>= oauthRequest CurlClient+ let oaUrl = concat+ [authUrl+ , "?oauth_token="+ , findWithDefault ("oauth_token", "ERR") $ oauthParams tok+ ]+ redirectString RedirectTemporary oaUrl+ dispatch "GET" [] = do+ render <- getUrlRender+ tm <- getRouteToMaster+ let app = Application key sec (URL $ render $ tm url)+ verifier <- runFormGet' $ stringInput "oauth_verifier"+ oaTok <- runFormGet' $ stringInput "oauth_token"+ let appTok = fromApplication app+ params = OA.replace ("oauth_token", oaTok) $ oauthParams appTok+ reqTok = injectOAuthVerifier verifier $ ReqToken app params+ accTok <- runOAuthM reqTok $ do+ signRq2 HMACSHA1 Nothing (fromJust . parseURL $ accUrl) >>= oauthRequest CurlClient+ let crId = findWithDefault (ident, error "oops!") $ oauthParams accTok+ creds = Creds name crId $ toList $ oauthParams accTok+ setCreds True creds+ dispatch _ _ = notFound+ login tm = do+ render <- liftHandler getUrlRender+ let app = Application key sec (URL $ render $ tm url)+ tok <- runOAuthM (fromApplication app) $ do+ signRq2 HMACSHA1 Nothing (fromJust . parseURL $ reqUrl) >>= oauthRequest CurlClient+ let oaUrl = concat+ [authUrl+ , "?oauth_token="+ , findWithDefault ("oauth_token", "ERR") $ oauthParams tok+ ]+ addHtml+#if GHC7+ [hamlet|+#else+ [$hamlet|+#endif+ %a!href=$oaUrl$ Login with $name$+ |]++authTwitter :: YesodAuth m =>+ String -- ^ Consumer Key+ -> String -- ^ Consumer Secret+ -> AuthPlugin m+authTwitter = authOAuth "twitter"+ "screen_name"+ "http://twitter.com/oauth/request_token"+ "http://twitter.com/oauth/access_token"+ "http://twitter.com/oauth/authorize"
+ yesod-auth-oauth.cabal view
@@ -0,0 +1,59 @@+-- yesod-auth-oauth.cabal auto-generated by cabal init. For additional+-- options, see+-- http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#pkg-descr.+-- The name of the package.+Name: yesod-auth-oauth++-- The package version. See the Haskell package versioning policy+-- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for+-- standards guiding when and how versions should be incremented.+Version: 0.1++-- A short (one-line) description of the package.+Synopsis: OAuth wrapper for yesod-auth++-- A longer description of the package.+Description: General OAuth interface for yesod-auth.++-- The license under which the package is released.+License: BSD3++-- The file containing the license text.+License-file: LICENSE++-- The package author(s).+Author: Hiromi ISHII++-- An email address to which users can send suggestions, bug reports,+-- and patches.+Maintainer: konn.jinro_at_gmail.com++-- A copyright notice.+-- Copyright: ++Category: Web++Build-type: Simple++-- Extra files to be distributed with the package, such as examples or+-- a README.+-- Extra-source-files: ++-- Constraint on the version of Cabal needed to build this package.+Cabal-version: >=1.2+++Library+ -- Modules exported by the library.+ Exposed-modules: Yesod.Helpers.Auth.OAuth+ + -- Packages needed in order to build this package.+ Build-depends: base >= 4 && < 5, hoauth >= 0.3 && <0.4, yesod-auth >= 0.2 && < 0.3,+ yesod >= 0.6 && < 0.7+ + -- Modules not exported by this package.+ -- Other-modules: + + -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source.+ -- Build-tools: +