Unverified Commit 11caf93c authored by Rafael Kellermann Streit's avatar Rafael Kellermann Streit Committed by GitHub

Merge pull request #1126 from RocketChat/new/facebook-login

[NEW] Facebook oauth login
parents b6a83f35 acf53105
...@@ -8,7 +8,6 @@ import chat.rocket.android.infrastructure.LocalRepository ...@@ -8,7 +8,6 @@ import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.* import chat.rocket.android.server.domain.*
import chat.rocket.android.server.domain.model.Account import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.server.presentation.CheckServerPresenter
import chat.rocket.android.util.extensions.* import chat.rocket.android.util.extensions.*
import chat.rocket.android.util.retryIO import chat.rocket.android.util.retryIO
import chat.rocket.common.RocketChatAuthException import chat.rocket.common.RocketChatAuthException
...@@ -31,6 +30,7 @@ private const val SERVICE_NAME_GITHUB = "github" ...@@ -31,6 +30,7 @@ private const val SERVICE_NAME_GITHUB = "github"
private const val SERVICE_NAME_GOOGLE = "google" private const val SERVICE_NAME_GOOGLE = "google"
private const val SERVICE_NAME_LINKEDIN = "linkedin" private const val SERVICE_NAME_LINKEDIN = "linkedin"
private const val SERVICE_NAME_GILAB = "gitlab" private const val SERVICE_NAME_GILAB = "gitlab"
private const val SERVICE_NAME_FACEBOOK = "facebook"
class LoginPresenter @Inject constructor( class LoginPresenter @Inject constructor(
private val view: LoginView, private val view: LoginView,
...@@ -143,9 +143,12 @@ class LoginPresenter @Inject constructor( ...@@ -143,9 +143,12 @@ class LoginPresenter @Inject constructor(
var totalSocialAccountsEnabled = 0 var totalSocialAccountsEnabled = 0
if (settings.isFacebookAuthenticationEnabled()) { if (settings.isFacebookAuthenticationEnabled()) {
// //TODO: Remove until we have this implemented val clientId = getOauthClientId(services, SERVICE_NAME_FACEBOOK)
// view.enableLoginByFacebook() if (clientId != null) {
// totalSocialAccountsEnabled++ view.setupFacebookButtonListener(OauthHelper.getFacebookOauthUrl(clientId, currentServer, state), state)
view.enableLoginByFacebook()
totalSocialAccountsEnabled++
}
} }
if (settings.isGithubAuthenticationEnabled()) { if (settings.isGithubAuthenticationEnabled()) {
val clientId = getOauthClientId(services, SERVICE_NAME_GITHUB) val clientId = getOauthClientId(services, SERVICE_NAME_GITHUB)
......
...@@ -145,6 +145,14 @@ interface LoginView : LoadingView, MessageView { ...@@ -145,6 +145,14 @@ interface LoginView : LoadingView, MessageView {
*/ */
fun setupLinkedinButtonListener(linkedinUrl: String, state: String) fun setupLinkedinButtonListener(linkedinUrl: String, state: String)
/**
* Setups the Facebook button when tapped.
*
* @param facebookOauthUrl The Facebook OAuth URL to authenticate with.
* @param state A random string generated by the app, which you'll verify later (to protect against forgery attacks).
*/
fun setupFacebookButtonListener(facebookOauthUrl: String, state: String)
/** /**
* Shows the "login by Meteor" view if it is enable by the server settings. * Shows the "login by Meteor" view if it is enable by the server settings.
*/ */
......
...@@ -261,6 +261,15 @@ class LoginFragment : Fragment(), LoginView { ...@@ -261,6 +261,15 @@ class LoginFragment : Fragment(), LoginView {
} }
} }
override fun setupFacebookButtonListener(facebookOauthUrl: String, state: String) {
ui { activity ->
button_facebook.setOnClickListener {
startActivityForResult(activity.oauthWebViewIntent(facebookOauthUrl, state), REQUEST_CODE_FOR_OAUTH)
activity.overridePendingTransition(R.anim.slide_up, R.anim.hold)
}
}
}
override fun enableLoginByGithub() { override fun enableLoginByGithub() {
ui { ui {
button_github.isClickable = true button_github.isClickable = true
......
...@@ -67,4 +67,21 @@ object OauthHelper { ...@@ -67,4 +67,21 @@ object OauthHelper {
"&response_type=code" + "&response_type=code" +
"&scope=read_user" "&scope=read_user"
} }
}
\ No newline at end of file /**
* Returns the Facebook Oauth URL.
*
* @param clientId The Facebook client ID.
* @param serverUrl The server URL.
* @param state An unguessable random string used to protect against forgery attacks.
* @return The Facebook Oauth URL.
*/
fun getFacebookOauthUrl(clientId: String, serverUrl: String, state: String): String {
return "https://facebook.com/v2.9/dialog/oauth" +
"?client_id=$clientId" +
"&redirect_uri=${serverUrl.removeTrailingSlash()}/_oauth/facebook?close" +
"&state=$state" +
"&response_type=code" +
"&scope=email"
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment