diff --git a/app/build.gradle b/app/build.gradle index d0274cdf8b..2762575510 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -181,4 +181,5 @@ dependencies { //Smart LOck authentication implementation "com.google.android.gms:play-services-auth:${rootConfiguration.playServiceAuthVersion}" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${rootConfiguration.kotlinVersion}" + implementation "com.google.android.gms:play-services-safetynet:${rootConfiguration.safetynetVersion}" } diff --git a/app/config.gradle b/app/config.gradle index ebdfdf2fe0..7470a53024 100644 --- a/app/config.gradle +++ b/app/config.gradle @@ -25,4 +25,5 @@ ext { mockitoCoreVersion = '1.10.19' playServiceAuthVersion='16.0.1' shimmerVersion = "0.5.0" + safetynetVersion = "16.0.0" } diff --git a/app/src/main/java/org/fossasia/susi/ai/data/SignUpModel.kt b/app/src/main/java/org/fossasia/susi/ai/data/SignUpModel.kt index 683036f08a..91b3938292 100644 --- a/app/src/main/java/org/fossasia/susi/ai/data/SignUpModel.kt +++ b/app/src/main/java/org/fossasia/susi/ai/data/SignUpModel.kt @@ -20,10 +20,10 @@ class SignUpModel : ISignUpModel { private lateinit var authResponseCall: Call - override fun signUp(email: String, password: String, listener: ISignUpModel.OnSignUpFinishedListener) { + override fun signUp(email: String, password: String, recaptchaResponse: String, listener: ISignUpModel.OnSignUpFinishedListener) { authResponseCall = ClientBuilder.susiApi - .signUp(email, password) + .signUp(email, password, recaptchaResponse) authResponseCall.enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { diff --git a/app/src/main/java/org/fossasia/susi/ai/data/contract/ISignUpModel.kt b/app/src/main/java/org/fossasia/susi/ai/data/contract/ISignUpModel.kt index 65cb1b2447..a3795fd770 100644 --- a/app/src/main/java/org/fossasia/susi/ai/data/contract/ISignUpModel.kt +++ b/app/src/main/java/org/fossasia/susi/ai/data/contract/ISignUpModel.kt @@ -16,7 +16,7 @@ interface ISignUpModel { fun onSuccess(response: Response) } - fun signUp(email: String, password: String, listener: OnSignUpFinishedListener) + fun signUp(email: String, password: String, recaptchaResponse: String, listener: OnSignUpFinishedListener) fun cancelSignUp() } diff --git a/app/src/main/java/org/fossasia/susi/ai/rest/services/SusiService.kt b/app/src/main/java/org/fossasia/susi/ai/rest/services/SusiService.kt index 9477b6ef85..e0f1b43d12 100644 --- a/app/src/main/java/org/fossasia/susi/ai/rest/services/SusiService.kt +++ b/app/src/main/java/org/fossasia/susi/ai/rest/services/SusiService.kt @@ -72,7 +72,8 @@ interface SusiService { @POST("/aaa/signup.json") fun signUp( @Query("signup") email: String, - @Query("password") password: String + @Query("password") password: String, + @Query("g-recaptcha-response") recaptchaResponse: String ): Call /** diff --git a/app/src/main/java/org/fossasia/susi/ai/signup/SignUpActivity.kt b/app/src/main/java/org/fossasia/susi/ai/signup/SignUpActivity.kt index 0d83a40085..52e263f754 100644 --- a/app/src/main/java/org/fossasia/susi/ai/signup/SignUpActivity.kt +++ b/app/src/main/java/org/fossasia/susi/ai/signup/SignUpActivity.kt @@ -8,9 +8,13 @@ import android.content.Intent import android.graphics.Color import android.os.Bundle import android.support.v7.app.AppCompatActivity +import android.util.Log import android.view.MenuItem import android.view.View import android.widget.Toast +import com.google.android.gms.safetynet.SafetyNet +import com.google.android.gms.tasks.OnFailureListener +import com.google.android.gms.tasks.OnSuccessListener import kotlinx.android.synthetic.main.activity_sign_up.* import org.fossasia.susi.ai.R import org.fossasia.susi.ai.chat.ChatActivity @@ -22,6 +26,7 @@ import org.fossasia.susi.ai.login.ForgotPass import org.fossasia.susi.ai.signup.contract.ISignUpPresenter import org.fossasia.susi.ai.signup.contract.ISignUpView import org.fossasia.susi.ai.skills.SkillsActivity +import timber.log.Timber /** *

The SignUp activity.

@@ -100,8 +105,8 @@ class SignUpActivity : AppCompatActivity(), ISignUpView { startActivity(intent) finish() }) - setNegativeButton(android.R.string.no, DialogInterface.OnClickListener { - dialog, id -> dialog.cancel() + setNegativeButton(android.R.string.no, DialogInterface.OnClickListener { dialog, id -> + dialog.cancel() }) show() } @@ -252,21 +257,34 @@ class SignUpActivity : AppCompatActivity(), ISignUpView { private fun signUp() { signUp.setOnClickListener { - - email.error = null - password.error = null - confirmPassword.error = null - inputUrlSignUp.error = null - - val stringEmail = email.editText?.text.toString() - val stringPassword = password.editText?.text.toString() - val stringConfirmPassword = confirmPassword.editText?.text.toString() - val stringURL = inputUrlSignUp.editText?.text.toString() - - signUpPresenter.signUp(stringEmail, stringPassword, stringConfirmPassword, !customServerSignUp.isChecked, stringURL, acceptTermsAndConditions.isChecked) + verifyRecaptcha() } } + fun verifyRecaptcha() { + SafetyNet.getClient(this).verifyWithRecaptcha(RECAPTCHA_KEY) + .addOnSuccessListener(this, OnSuccessListener { response -> + val userResponseToken = response.tokenResult + Log.d("KHANKI", "Started recaptcha verification") + if (response.tokenResult?.isNotEmpty() == true) { + email.error = null + password.error = null + confirmPassword.error = null + inputUrlSignUp.error = null + + val stringEmail = email.editText?.text.toString() + val stringPassword = password.editText?.text.toString() + val stringConfirmPassword = confirmPassword.editText?.text.toString() + val stringURL = inputUrlSignUp.editText?.text.toString() + Log.d("KHANKI", "Signned up") + signUpPresenter.signUp(stringEmail, stringPassword, stringConfirmPassword, !customServerSignUp.isChecked, stringURL, acceptTermsAndConditions.isChecked, userResponseToken) + } + }) + .addOnFailureListener(this, OnFailureListener { e -> + Timber.e("Error: " + e) + }) + } + override fun onDestroy() { signUpPresenter.onDetach() super.onDestroy() diff --git a/app/src/main/java/org/fossasia/susi/ai/signup/SignUpPresenter.kt b/app/src/main/java/org/fossasia/susi/ai/signup/SignUpPresenter.kt index 4c7b58a13b..1ef4e66163 100644 --- a/app/src/main/java/org/fossasia/susi/ai/signup/SignUpPresenter.kt +++ b/app/src/main/java/org/fossasia/susi/ai/signup/SignUpPresenter.kt @@ -41,7 +41,7 @@ class SignUpPresenter(signUpActivity: SignUpActivity) : ISignUpPresenter, ISignU this.signUpView = signUpView } - override fun signUp(email: String, password: String, conpass: String, isSusiServerSelected: Boolean, url: String, isTermsAndConditionSelected: Boolean) { + override fun signUp(email: String, password: String, conpass: String, isSusiServerSelected: Boolean, url: String, isTermsAndConditionSelected: Boolean, recaptchaResponse: String) { if (email.isEmpty()) { signUpView?.invalidCredentials(true, Constant.EMAIL) @@ -90,7 +90,7 @@ class SignUpPresenter(signUpActivity: SignUpActivity) : ISignUpPresenter, ISignU this.email = email signUpView?.showProgress(true) - signUpModel.signUp(email.trim { it <= ' ' }.toLowerCase(), password, this) + signUpModel.signUp(email.trim { it <= ' ' }.toLowerCase(), password, recaptchaResponse, this) } override fun onError(throwable: Throwable) { diff --git a/app/src/main/java/org/fossasia/susi/ai/signup/contract/ISignUpPresenter.kt b/app/src/main/java/org/fossasia/susi/ai/signup/contract/ISignUpPresenter.kt index 4fd417367b..759b5ce721 100644 --- a/app/src/main/java/org/fossasia/susi/ai/signup/contract/ISignUpPresenter.kt +++ b/app/src/main/java/org/fossasia/susi/ai/signup/contract/ISignUpPresenter.kt @@ -10,7 +10,7 @@ interface ISignUpPresenter { fun onAttach(signUpView: ISignUpView) - fun signUp(email: String, password: String, conpass: String, isSusiServerSelected: Boolean, url: String, isTermsAndConditionSelected: Boolean) + fun signUp(email: String, password: String, conpass: String, isSusiServerSelected: Boolean, url: String, isTermsAndConditionSelected: Boolean, recaptchaResponse: String) fun onDetach()