Skip to content

Commit

Permalink
add reddit provider
Browse files Browse the repository at this point in the history
  • Loading branch information
manland committed Jun 10, 2013
1 parent 4748c7d commit 5ed536f
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 2 deletions.
2 changes: 1 addition & 1 deletion app/services/auth/OAuth2Provider.scala
Expand Up @@ -133,7 +133,7 @@ trait OAuth2Provider extends AuthProvider {
"grant_type" -> "authorization_code")

val req = WS.url(accessTokenUrl).withHeaders(accessTokenHeaders: _*)

Logger.info("OAuth fetch token ==> " + data)
method match {
case Get => req.withQueryString(data.toSeq: _*).get
case Post => req.post(data.mapValues(Seq(_)))
Expand Down
3 changes: 2 additions & 1 deletion app/services/auth/ProviderDispatcher.scala
Expand Up @@ -16,7 +16,8 @@ object ProviderDispatcher {
Trello,
Viadeo,
BetaSeries,
Bitbucket)
Bitbucket,
Reddit)

def apply(providerName: String) = get(providerName)

Expand Down
75 changes: 75 additions & 0 deletions app/services/auth/providers/Reddit.scala
@@ -0,0 +1,75 @@
package services.auth.providers

import services.auth._
import play.api.mvc.RequestHeader
import play.api.libs.ws.WS
import play.api.Logger
import org.apache.commons.codec.binary.Base64.encodeBase64
import models.user.ProviderUser
import services.commands.CmdToUser
import models.user.SkimboToken

object Reddit extends OAuth2Provider {

override val name = "reddit"
override val namespace = "rd"

override def additionalAccreditationParameters = Map("duration" -> "permanent")
override val permissions = Seq("identity", "modposts")

override protected def fetchAccessTokenResponse(code: String)(implicit request: RequestHeader) = {
val data = Map(
"code" -> code,
"redirect_uri" -> authRoute.absoluteURL(false),
"grant_type" -> "authorization_code")

var url = WS
.url(accessTokenUrl)
.withQueryString(data.toSeq: _*)
.withAuth(clientId, secret, com.ning.http.client.Realm.AuthScheme.BASIC)
url.post("")
}

override def processToken(response: play.api.libs.ws.Response) = {
Token((response.json \ "access_token").asOpt[String],
(response.json \ "expires_in").asOpt[Int],
(response.json \ "refresh_token").asOpt[String])
}

override def fetch(idUser: String, url: String) = {
val token = "bearer "+getToken(idUser).get.token
WS.url(url)
.withHeaders(("Authorization" -> token), ("user-agent" -> "skimbo by /u/skimbo34"))
}

override def distantUserToSkimboUser(idUser: String, response: play.api.libs.ws.Response): Option[ProviderUser] = {
if(isInvalidToken(idUser, response)) {
CmdToUser.sendTo(idUser, models.command.TokenInvalid(name))
None
} else {
try {
val json = response.json
val id = (json \ "id").as[String]
val username = (json \ "name").asOpt[String]
val name = (json \ "name").asOpt[String]
val description = Some("")
val profileImage = None
Some(models.user.ProviderUser(
id,
Reddit.name,
Some(SkimboToken(getToken(idUser).get.token, None)),
username,
name,
description,
profileImage))
} catch {
case t:Throwable => {
Logger("RedditProvider").error("Error during fetching user details Reddit "+t.getMessage())
Logger("RedditProvider").error(response.body.toString())
None
}
}
}
}

}
8 changes: 8 additions & 0 deletions conf/default-social.conf
Expand Up @@ -94,4 +94,12 @@ social {
urlUserInfos="https://api.bitbucket.org/1.0/user"
}

reddit {
clientId=""
secret=""
authorize="https://ssl.reddit.com/api/v1/authorize"
accessToken="https://ssl.reddit.com/api/v1/access_token"
urlUserInfos="https://oauth.reddit.com/api/v1/me"
}

}
Binary file added public/img/brand/reddit.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 5ed536f

Please sign in to comment.