Skip to content

Commit e815f88

Browse files
committed
Rewrite OAuthAPI with Transort
1 parent f581275 commit e815f88

File tree

4 files changed

+32
-15
lines changed

4 files changed

+32
-15
lines changed

src/main/scala/codecheck/github/api/OAuthAPI.scala

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package codecheck.github.api
22

3-
import com.ning.http.client.AsyncHttpClient
4-
import com.ning.http.client.AsyncCompletionHandler
5-
import com.ning.http.client.Response
6-
import com.ning.http.client.RequestBuilder
73
import java.net.URLEncoder
84
import scala.concurrent.Promise
95
import scala.concurrent.Future
@@ -12,8 +8,9 @@ import org.json4s.DefaultFormats
128
import java.util.UUID
139
import codecheck.github.models.AccessToken
1410
import codecheck.github.exceptions.OAuthAPIException
11+
import codecheck.github.transport._
1512

16-
class OAuthAPI(clientId: String, clientSecret: String, redirectUri: String, client: AsyncHttpClient) {
13+
class OAuthAPI(clientId: String, clientSecret: String, redirectUri: String, client: Transport) {
1714
private implicit val format = DefaultFormats
1815

1916
private val accessRequestUri = "https://github.com/login/oauth/authorize"
@@ -38,33 +35,31 @@ class OAuthAPI(clientId: String, clientSecret: String, redirectUri: String, clie
3835
"code" -> code,
3936
"redirect_uri" -> redirectUri
4037
)
41-
val builder: RequestBuilder = new RequestBuilder("POST")
38+
val request = client.preparePost(tokenRequestUri)
4239
.setHeader("Content-Type", "application/x-www-form-urlencoded")
4340
.setHeader("Accept", "application/json")
44-
.setFollowRedirects(true)
45-
.setUrl(tokenRequestUri)
46-
params.foreach { case (k, v) => builder.addFormParam(k, v) }
41+
.setFollowRedirect(true)
42+
params.foreach { case (k, v) => request.addFormParam(k, v) }
4743

4844
val deferred = Promise[AccessToken]()
49-
client.prepareRequest(builder.build).execute(new AsyncCompletionHandler[Response]() {
45+
request.execute(new CompletionHandler() {
5046
def onCompleted(res: Response) = {
51-
val json = JsonMethods.parse(res.getResponseBody("utf-8"))
47+
val body = res.getResponseBody.getOrElse("{\"error\": \"No response\"}")
48+
val json = JsonMethods.parse(body)
5249
(json \ "error").toOption match {
5350
case Some(_) => deferred.failure(new OAuthAPIException(json))
5451
case None => deferred.success(AccessToken(json))
5552
}
56-
res
5753
}
58-
override def onThrowable(t: Throwable) {
54+
def onThrowable(t: Throwable) {
5955
deferred.failure(t)
60-
super.onThrowable(t)
6156
}
6257
})
6358
deferred.future
6459
}
6560
}
6661

6762
object OAuthAPI {
68-
def apply(clientId: String, clientSecret: String, redirectUri: String)(implicit client: AsyncHttpClient) = new OAuthAPI(clientId, clientSecret, redirectUri, client)
63+
def apply(clientId: String, clientSecret: String, redirectUri: String)(implicit client: Transport) = new OAuthAPI(clientId, clientSecret, redirectUri, client)
6964

7065
}

src/main/scala/codecheck/github/transport/Request.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package codecheck.github.transport
33
trait Request {
44
def setBody(body: String): Request
55
def setHeader(name: String, value: String): Request
6+
def setFollowRedirect(b: Boolean): Request
7+
def addFormParam(name: String, value: String): Request
68

79
def execute(handler: CompletionHandler): Unit
810
}

src/main/scala/codecheck/github/transport/asynchttp19/AsyncHttp19Transport.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@ class AsyncHttp19Request(request: AsyncHttpClient#BoundRequestBuilder) extends R
2727
this
2828
}
2929

30+
def setFollowRedirect(b: Boolean): Request = {
31+
request.setFollowRedirects(b)
32+
this
33+
}
34+
35+
def addFormParam(name: String, value: String): Request = {
36+
request.addFormParam(name, value)
37+
this
38+
}
39+
3040
def execute(handler: CompletionHandler): Unit = {
3141
request.execute(new AsyncCompletionHandler[AsyncHttpResponse]() {
3242
def onCompleted(res: AsyncHttpResponse) = {

src/main/scala/codecheck/github/transport/asynchttp20/AsyncHttp20Transport.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@ class AsyncHttp20Request(request: BoundRequestBuilder) extends Request {
2727
this
2828
}
2929

30+
def setFollowRedirect(b: Boolean): Request = {
31+
request.setFollowRedirect(b)
32+
this
33+
}
34+
35+
def addFormParam(name: String, value: String): Request = {
36+
request.addFormParam(name, value)
37+
this
38+
}
39+
3040
def execute(handler: CompletionHandler): Unit = {
3141
request.execute(new AsyncCompletionHandler[AsyncHttpResponse]() {
3242
def onCompleted(res: AsyncHttpResponse) = {

0 commit comments

Comments
 (0)