Skip to content

Merge improvements from anonymous auth PR (#309) #808

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 19, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion auth/src/main/java/com/firebase/ui/auth/AuthUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ public Task<Void> signOut(@NonNull FragmentActivity activity) {

// Twitter sign out
try {
TwitterProvider.signout(activity);
TwitterProvider.signOut(activity);
} catch (NoClassDefFoundError e) {
// do nothing
}
Expand Down
57 changes: 18 additions & 39 deletions auth/src/main/java/com/firebase/ui/auth/IdpResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,35 +24,28 @@

import com.firebase.ui.auth.ui.ExtraConstants;
import com.google.firebase.auth.FacebookAuthProvider;
import com.google.firebase.auth.GithubAuthProvider;
import com.google.firebase.auth.GoogleAuthProvider;
import com.google.firebase.auth.TwitterAuthProvider;

/**
* A container that encapsulates the result of authenticating with an Identity Provider.
*/
public class IdpResponse implements Parcelable {
private final String mProviderId;
private final String mEmail;
private final String mPhoneNumber;
private final User mUser;
private final String mToken;
private final String mSecret;
private final int mErrorCode;

private IdpResponse(int errorCode) {
this(null, null, null, null, null, errorCode);
this(null, null, null, errorCode);
}

private IdpResponse(
String providerId,
String email,
String phoneNumber,
User user,
String token,
String secret,
int errorCode) {
mProviderId = providerId;
mEmail = email;
mPhoneNumber = phoneNumber;
mUser = user;
mToken = token;
mSecret = secret;
mErrorCode = errorCode;
Expand Down Expand Up @@ -89,23 +82,23 @@ public Intent toIntent() {
@NonNull
@AuthUI.SupportedProvider
public String getProviderType() {
return mProviderId;
return mUser.getProviderId();
}

/**
* Get the email used to sign in.
*/
@Nullable
public String getEmail() {
return mEmail;
return mUser.getEmail();
}

/**
* Get the phone number used to sign in.
*/
@Nullable
public String getPhoneNumber() {
return mPhoneNumber;
return mUser.getPhoneNumber();
}

/**
Expand Down Expand Up @@ -138,9 +131,7 @@ public int describeContents() {

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mProviderId);
dest.writeString(mEmail);
dest.writeString(mPhoneNumber);
dest.writeParcelable(mUser, flags);
dest.writeString(mToken);
dest.writeString(mSecret);
dest.writeInt(mErrorCode);
Expand All @@ -150,9 +141,7 @@ public void writeToParcel(Parcel dest, int flags) {
@Override
public IdpResponse createFromParcel(Parcel in) {
return new IdpResponse(
in.readString(),
in.readString(),
in.readString(),
in.<User>readParcelable(User.class.getClassLoader()),
in.readString(),
in.readString(),
in.readInt()
Expand All @@ -167,21 +156,12 @@ public IdpResponse[] newArray(int size) {

@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public static class Builder {
private String mProviderId;
private String mEmail;
private String mPhoneNumber;
private User mUser;
private String mToken;
private String mSecret;

public Builder(@AuthUI.SupportedProvider @NonNull String providerId,
@Nullable String email) {
mProviderId = providerId;
mEmail = email;
}

public Builder setPhoneNumber(String phoneNumber) {
mPhoneNumber = phoneNumber;
return this;
public Builder(@NonNull User user) {
mUser = user;
}

public Builder setToken(String token) {
Expand All @@ -195,22 +175,21 @@ public Builder setSecret(String secret) {
}

public IdpResponse build() {
if ((mProviderId.equalsIgnoreCase(GoogleAuthProvider.PROVIDER_ID)
|| mProviderId.equalsIgnoreCase(FacebookAuthProvider.PROVIDER_ID)
|| mProviderId.equalsIgnoreCase(TwitterAuthProvider.PROVIDER_ID)
|| mProviderId.equalsIgnoreCase(GithubAuthProvider.PROVIDER_ID))
String providerId = mUser.getProviderId();
if ((providerId.equalsIgnoreCase(GoogleAuthProvider.PROVIDER_ID)
|| providerId.equalsIgnoreCase(FacebookAuthProvider.PROVIDER_ID)
|| providerId.equalsIgnoreCase(TwitterAuthProvider.PROVIDER_ID))
&& TextUtils.isEmpty(mToken)) {
throw new IllegalStateException(
"Token cannot be null when using a non-email provider.");
}
if (mProviderId.equalsIgnoreCase(TwitterAuthProvider.PROVIDER_ID)
if (providerId.equalsIgnoreCase(TwitterAuthProvider.PROVIDER_ID)
&& TextUtils.isEmpty(mSecret)) {
throw new IllegalStateException(
"Secret cannot be null when using the Twitter provider.");
}

return new IdpResponse(
mProviderId, mEmail, mPhoneNumber, mToken, mSecret, ResultCodes.OK);
return new IdpResponse(mUser, mToken, mSecret, ResultCodes.OK);
}
}
}
159 changes: 159 additions & 0 deletions auth/src/main/java/com/firebase/ui/auth/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
package com.firebase.ui.auth;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;

import com.firebase.ui.auth.ui.ExtraConstants;

@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class User implements Parcelable {
public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {
@Override
public User createFromParcel(Parcel in) {
return new User(
in.readString(),
in.readString(),
in.readString(),
in.readString(),
in.<Uri>readParcelable(Uri.class.getClassLoader()));
}

@Override
public User[] newArray(int size) {
return new User[size];
}
};

private final String mProviderId;
private final String mEmail;
private final String mPhoneNumber;
private final String mName;
private final Uri mPhotoUri;

private User(String providerId, String email, String phoneNumber, String name, Uri photoUri) {
mProviderId = providerId;
mEmail = email;
mPhoneNumber = phoneNumber;
mName = name;
mPhotoUri = photoUri;
}

public static User getUser(Intent intent) {
return intent.getParcelableExtra(ExtraConstants.EXTRA_USER);
}

public static User getUser(Bundle arguments) {
return arguments.getParcelable(ExtraConstants.EXTRA_USER);
}

@NonNull
@AuthUI.SupportedProvider
public String getProviderId() {
return mProviderId;
}

@Nullable
public String getEmail() {
return mEmail;
}

@Nullable
public String getPhoneNumber() {
return mPhoneNumber;
}

@Nullable
public String getName() {
return mName;
}

@Nullable
public Uri getPhotoUri() {
return mPhotoUri;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

User user = (User) o;

return mProviderId.equals(user.mProviderId)
&& (mEmail == null ? user.mEmail == null : mEmail.equals(user.mEmail))
&& (mName == null ? user.mName == null : mName.equals(user.mName))
&& (mPhotoUri == null ? user.mPhotoUri == null : mPhotoUri.equals(user.mPhotoUri));
}

@Override
public int hashCode() {
int result = mProviderId.hashCode();
result = 31 * result + (mEmail == null ? 0 : mEmail.hashCode());
result = 31 * result + (mName == null ? 0 : mName.hashCode());
result = 31 * result + (mPhotoUri == null ? 0 : mPhotoUri.hashCode());
return result;
}

@Override
public String toString() {
return "User{" +
"mProviderId='" + mProviderId + '\'' +
", mEmail='" + mEmail + '\'' +
", mName='" + mName + '\'' +
", mPhotoUri=" + mPhotoUri +
'}';
}

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeString(mProviderId);
dest.writeString(mEmail);
dest.writeString(mPhoneNumber);
dest.writeString(mName);
dest.writeParcelable(mPhotoUri, flags);
}

public static class Builder {
private String mProviderId;
private String mEmail;
private String mPhoneNumber;
private String mName;
private Uri mPhotoUri;

public Builder(@AuthUI.SupportedProvider @NonNull String providerId,
@Nullable String email) {
mProviderId = providerId;
mEmail = email;
}

public Builder setPhoneNumber(String phoneNumber) {
mPhoneNumber = phoneNumber;
return this;
}

public Builder setName(String name) {
mName = name;
return this;
}

public Builder setPhotoUri(Uri photoUri) {
mPhotoUri = photoUri;
return this;
}

public User build() {
return new User(mProviderId, mEmail, mPhoneNumber, mName, mPhotoUri);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
Expand All @@ -35,6 +36,7 @@
import com.firebase.ui.auth.AuthUI;
import com.firebase.ui.auth.IdpResponse;
import com.firebase.ui.auth.R;
import com.firebase.ui.auth.User;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.FacebookAuthProvider;

Expand Down Expand Up @@ -133,19 +135,31 @@ public void onCompleted(JSONObject object, GraphResponse response) {
Log.w(TAG, "Received null response from Facebook GraphRequest");
onFailure();
} else {
String email = null;
String name = null;
Uri photoUri = null;

try {
String email = object.getString("email");
onSuccess(email, loginResult);
email = object.getString("email");
} catch (JSONException e) {
Log.e(TAG, "Failure retrieving Facebook email", e);
onSuccess(null, loginResult);
}
try {
name = object.getString("name");
} catch (JSONException ignored) {}
try {
photoUri = Uri.parse(object.getJSONObject("picture")
.getJSONObject("data")
.getString("url"));
} catch (JSONException ignored) {}

onSuccess(loginResult, email, name, photoUri);
}
}
});

Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
parameters.putString("fields", "id,name,email,picture");
request.setParameters(parameters);
request.executeAsync();
}
Expand All @@ -161,15 +175,18 @@ public void onError(FacebookException error) {
onFailure();
}

private void onSuccess(@Nullable String email, LoginResult loginResult) {
private void onSuccess(LoginResult loginResult,
@Nullable String email,
String name,
Uri photoUri) {
gcCallbackManager();
mCallbackObject.onSuccess(createIdpResponse(email, loginResult));
}

private IdpResponse createIdpResponse(@Nullable String email, LoginResult loginResult) {
return new IdpResponse.Builder(FacebookAuthProvider.PROVIDER_ID, email)
mCallbackObject.onSuccess(new IdpResponse.Builder(
new User.Builder(FacebookAuthProvider.PROVIDER_ID, email)
.setName(name)
.setPhotoUri(photoUri)
.build())
.setToken(loginResult.getAccessToken().getToken())
.build();
.build());
}

private void onFailure() {
Expand Down
Loading