Commit 8ce46b54 authored by Sajal Narang's avatar Sajal Narang Committed by GitHub

Merge pull request #60 from wncc/login

Implement Login API
parents c166639c 280d3750
...@@ -32,7 +32,6 @@ import net.openid.appauth.AuthorizationServiceConfiguration; ...@@ -32,7 +32,6 @@ import net.openid.appauth.AuthorizationServiceConfiguration;
import in.ac.iitb.gymkhana.iitbapp.api.RetrofitInterface; import in.ac.iitb.gymkhana.iitbapp.api.RetrofitInterface;
import in.ac.iitb.gymkhana.iitbapp.api.ServiceGenerator; import in.ac.iitb.gymkhana.iitbapp.api.ServiceGenerator;
import in.ac.iitb.gymkhana.iitbapp.api.model.LoginRequest;
import in.ac.iitb.gymkhana.iitbapp.api.model.LoginResponse; import in.ac.iitb.gymkhana.iitbapp.api.model.LoginResponse;
import in.ac.iitb.gymkhana.iitbapp.gcm.RegistrationIntentService; import in.ac.iitb.gymkhana.iitbapp.gcm.RegistrationIntentService;
import retrofit2.Call; import retrofit2.Call;
...@@ -45,8 +44,8 @@ public class LoginActivity extends AppCompatActivity { ...@@ -45,8 +44,8 @@ public class LoginActivity extends AppCompatActivity {
public static final String REGISTRATION_COMPLETE = "registrationComplete"; public static final String REGISTRATION_COMPLETE = "registrationComplete";
private static final String TAG = "LoginActivity"; private static final String TAG = "LoginActivity";
private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
private final String clientId = "pFcDDWtUUfzlAX2ibriV25lm1J2m92O5ynfT4SYk"; //TODO: Change this to production before launch
private final String clientSecret = "k56GXiN1qB4Dt7CnTVWjuwLJyWntNulitWOkL7Wddr6JHPiHqIZgSfgUplO6neTqumVr32zA14XgQmkuoC8y6y9jnaQT9tKDsq4jQklRb8MQNQglQ1H4YrmqOwPfaNyO"; private final String clientId = "vR1pU7wXWyve1rUkg0fMS6StL1Kr6paoSmRIiLXJ";
private final Uri redirectUri = Uri.parse("https://redirecturi"); private final Uri redirectUri = Uri.parse("https://redirecturi");
private final Uri mAuthEndpoint = Uri.parse("http://gymkhana.iitb.ac.in/sso/oauth/authorize/"); private final Uri mAuthEndpoint = Uri.parse("http://gymkhana.iitb.ac.in/sso/oauth/authorize/");
private final Uri mTokenEndpoint = Uri.parse("http://gymkhana.iitb.ac.in/sso/oauth/token/"); private final Uri mTokenEndpoint = Uri.parse("http://gymkhana.iitb.ac.in/sso/oauth/token/");
...@@ -67,26 +66,23 @@ public class LoginActivity extends AppCompatActivity { ...@@ -67,26 +66,23 @@ public class LoginActivity extends AppCompatActivity {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPreferences = SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
PreferenceManager.getDefaultSharedPreferences(context); boolean sentToken = sharedPreferences.getBoolean(SENT_TOKEN_TO_SERVER, false);
boolean sentToken = sharedPreferences
.getBoolean(SENT_TOKEN_TO_SERVER, false);
if (sentToken) { if (sentToken) {
String token = intent.getStringExtra("Token"); String token = intent.getStringExtra("Token");
Log.d(TAG, "Going to login with :" + authCode + "\n" + token); Log.d(TAG, "Going to login with :" + authCode + "\n" + token);
//************ //************
//TODO Remove following 6 lines after the server is hosted //TODO Remove following 6 lines after the server is hosted
String gcmRegId = token; String gcmRegId = token;
session.createLoginSession(gcmRegId); // session.createLoginSession(gcmRegId);
Intent i = new Intent(mContext, MainActivity.class); // Intent i = new Intent(mContext, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i); // startActivity(i);
//************** //**************
login(authCode, token); login(authCode, redirectUri.toString(), gcmRegId);
} else { } else {
...@@ -101,8 +97,7 @@ public class LoginActivity extends AppCompatActivity { ...@@ -101,8 +97,7 @@ public class LoginActivity extends AppCompatActivity {
public void onClick(View view) { public void onClick(View view) {
Log.d(TAG, "Initiating auth"); Log.d(TAG, "Initiating auth");
AuthorizationServiceConfiguration config = AuthorizationServiceConfiguration config = new AuthorizationServiceConfiguration(mAuthEndpoint, mTokenEndpoint);
new AuthorizationServiceConfiguration(mAuthEndpoint, mTokenEndpoint);
makeAuthRequest(config); makeAuthRequest(config);
} }
...@@ -121,7 +116,6 @@ public class LoginActivity extends AppCompatActivity { ...@@ -121,7 +116,6 @@ public class LoginActivity extends AppCompatActivity {
@Override @Override
protected void onNewIntent(Intent intent) { protected void onNewIntent(Intent intent) {
checkIntent(intent); checkIntent(intent);
} }
...@@ -154,7 +148,7 @@ public class LoginActivity extends AppCompatActivity { ...@@ -154,7 +148,7 @@ public class LoginActivity extends AppCompatActivity {
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
registerReceiver(); registerReceiver();
Log.d(TAG, "In Resume"); Log.d(TAG, "On Resume");
} }
@Override @Override
...@@ -196,8 +190,7 @@ public class LoginActivity extends AppCompatActivity { ...@@ -196,8 +190,7 @@ public class LoginActivity extends AppCompatActivity {
} }
} }
private void makeAuthRequest( private void makeAuthRequest(@NonNull AuthorizationServiceConfiguration serviceConfig) {
@NonNull AuthorizationServiceConfiguration serviceConfig) {
AuthorizationRequest authRequest = new AuthorizationRequest.Builder( AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
serviceConfig, serviceConfig,
...@@ -221,7 +214,7 @@ public class LoginActivity extends AppCompatActivity { ...@@ -221,7 +214,7 @@ public class LoginActivity extends AppCompatActivity {
.build()); .build());
} }
//Todo: Change the color of Chrome custom tabs based on app theme color //TODO: Change the color of Chrome custom tabs based on app theme color
@TargetApi(Build.VERSION_CODES.M) @TargetApi(Build.VERSION_CODES.M)
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
private int getCustomTabColor() { private int getCustomTabColor() {
...@@ -232,16 +225,14 @@ public class LoginActivity extends AppCompatActivity { ...@@ -232,16 +225,14 @@ public class LoginActivity extends AppCompatActivity {
} }
} }
private void login(String authorizationCode, String gcmId) { private void login(String authorizationCode, final String redirectURI, String gcmID) {
final String gcmRegId = gcmId;
LoginRequest loginRequest = new LoginRequest(authorizationCode, gcmId);
RetrofitInterface retrofitInterface = ServiceGenerator.createService(RetrofitInterface.class); RetrofitInterface retrofitInterface = ServiceGenerator.createService(RetrofitInterface.class);
retrofitInterface.login(loginRequest).enqueue(new Callback<LoginResponse>() { retrofitInterface.login(authorizationCode, redirectURI, gcmID).enqueue(new Callback<LoginResponse>() {
@Override @Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) { public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
if (response.isSuccessful()) { if (response.isSuccessful()) {
Log.d(TAG, "Login request successful"); Log.d(TAG, "Login request successful");
session.createLoginSession(gcmRegId); session.createLoginSession(redirectURI, response.body().getUser());
Intent i = new Intent(mContext, MainActivity.class); Intent i = new Intent(mContext, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
......
...@@ -56,7 +56,7 @@ public class MainActivity extends AppCompatActivity ...@@ -56,7 +56,7 @@ public class MainActivity extends AppCompatActivity
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
session = new SessionManager(getApplicationContext()); session = new SessionManager(getApplicationContext());
Toast.makeText(getApplicationContext(), "User Login Status: " + session.isLoggedIn(), Toast.LENGTH_LONG).show(); Toast.makeText(getApplicationContext(), "Log In status: " + session.isLoggedIn(), Toast.LENGTH_LONG).show();
session.checkLogin(); session.checkLogin();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
...@@ -184,7 +184,7 @@ public class MainActivity extends AppCompatActivity ...@@ -184,7 +184,7 @@ public class MainActivity extends AppCompatActivity
Manifest.permission.ACCESS_FINE_LOCATION) Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) { == PackageManager.PERMISSION_GRANTED) {
updateFragment(mapFragment); updateFragment(mapFragment);
} else{ } else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 0); ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 0);
} }
break; break;
......
...@@ -6,10 +6,13 @@ import android.content.SharedPreferences; ...@@ -6,10 +6,13 @@ import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor; import android.content.SharedPreferences.Editor;
import android.util.Log; import android.util.Log;
import in.ac.iitb.gymkhana.iitbapp.data.User;
public class SessionManager { public class SessionManager {
private static final String PREF_NAME = "LoggedInPref"; private static final String PREF_NAME = "LoggedInPref";
private static final String IS_LOGIN = "IsLoggedIn"; private static final String IS_LOGGED_IN = "IsLoggedIn";
private static final String GCM_ID = "GcmId"; private static final String GCM_ID = "GcmId";
public static final String CURRENT_USER = "current_user";
SharedPreferences pref; SharedPreferences pref;
Editor editor; Editor editor;
Context context; Context context;
...@@ -22,9 +25,7 @@ public class SessionManager { ...@@ -22,9 +25,7 @@ public class SessionManager {
} }
public void checkLogin() { public void checkLogin() {
if (!this.isLoggedIn()) { if (!this.isLoggedIn()) {
Intent i = new Intent(context, LoginActivity.class); Intent i = new Intent(context, LoginActivity.class);
// Closing all the Activities // Closing all the Activities
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
...@@ -32,20 +33,18 @@ public class SessionManager { ...@@ -32,20 +33,18 @@ public class SessionManager {
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Staring Login Activity // Staring Login Activity
context.startActivity(i); context.startActivity(i);
} }
} }
public void createLoginSession(String gcmId) { public void createLoginSession(String gcmId, User currentUser) {
Log.d("SessionManager", "GcmId being stored"); Log.d("SessionManager", "GcmId being stored");
editor.putBoolean(IS_LOGIN, true); editor.putBoolean(IS_LOGGED_IN, true);
editor.putString(GCM_ID, gcmId); editor.putString(GCM_ID, gcmId);
editor.putString(CURRENT_USER, currentUser.toString());
editor.commit(); editor.commit();
} }
public boolean isLoggedIn() { public boolean isLoggedIn() {
return pref.getBoolean(IS_LOGIN, false); return pref.getBoolean(IS_LOGGED_IN, false);
} }
} }
...@@ -4,7 +4,6 @@ import in.ac.iitb.gymkhana.iitbapp.api.model.EventCreateRequest; ...@@ -4,7 +4,6 @@ import in.ac.iitb.gymkhana.iitbapp.api.model.EventCreateRequest;
import in.ac.iitb.gymkhana.iitbapp.api.model.EventCreateResponse; import in.ac.iitb.gymkhana.iitbapp.api.model.EventCreateResponse;
import in.ac.iitb.gymkhana.iitbapp.api.model.ImageUploadRequest; import in.ac.iitb.gymkhana.iitbapp.api.model.ImageUploadRequest;
import in.ac.iitb.gymkhana.iitbapp.api.model.ImageUploadResponse; import in.ac.iitb.gymkhana.iitbapp.api.model.ImageUploadResponse;
import in.ac.iitb.gymkhana.iitbapp.api.model.LoginRequest;
import in.ac.iitb.gymkhana.iitbapp.api.model.LoginResponse; import in.ac.iitb.gymkhana.iitbapp.api.model.LoginResponse;
import in.ac.iitb.gymkhana.iitbapp.api.model.NewsFeedResponse; import in.ac.iitb.gymkhana.iitbapp.api.model.NewsFeedResponse;
import in.ac.iitb.gymkhana.iitbapp.api.model.NotificationsRequest; import in.ac.iitb.gymkhana.iitbapp.api.model.NotificationsRequest;
...@@ -17,8 +16,8 @@ import retrofit2.http.Path; ...@@ -17,8 +16,8 @@ import retrofit2.http.Path;
import retrofit2.http.Query; import retrofit2.http.Query;
public interface RetrofitInterface { public interface RetrofitInterface {
@POST("login/") @GET("login")
Call<LoginResponse> login(@Body LoginRequest loginRequest); Call<LoginResponse> login(@Query("code") String AUTH_CODE, @Query("redir") String redirectURI, @Query("fcm_id") String fcmID);
@POST("events") @POST("events")
Call<EventCreateResponse> createEvent(@Body EventCreateRequest eventCreateRequest); Call<EventCreateResponse> createEvent(@Body EventCreateRequest eventCreateRequest);
......
package in.ac.iitb.gymkhana.iitbapp.api.model;
import com.google.gson.annotations.SerializedName;
public class LoginRequest {
@SerializedName("AUTHORIZATION_CODE")
private String authCode;
@SerializedName("reg_id")
private String regId;
public LoginRequest(String authCode, String regId) {
this.authCode = authCode;
this.regId = regId;
}
public String getAuthCode() {
return authCode;
}
public void setAuthCode(String authCode) {
this.authCode = authCode;
}
public String getRegId() {
return regId;
}
public void setRegId(String regId) {
this.regId = regId;
}
}
package in.ac.iitb.gymkhana.iitbapp.api.model; package in.ac.iitb.gymkhana.iitbapp.api.model;
import com.google.gson.annotations.SerializedName;
import in.ac.iitb.gymkhana.iitbapp.data.User;
public class LoginResponse { public class LoginResponse {
private String result; @SerializedName("sessionid")
private String message; private String sessionID;
@SerializedName("user")
private int userID;
@SerializedName("profile_id")
private String profileID;
@SerializedName("profile")
private User user;
public LoginResponse(String sessionID, int userID, String profileID, User user) {
this.sessionID = sessionID;
this.userID = userID;
this.profileID = profileID;
this.user = user;
}
public String getSessionID() {
return sessionID;
}
public void setSessionID(String sessionID) {
this.sessionID = sessionID;
}
public int getUserID() {
return userID;
}
public LoginResponse(String result, String message) { public void setUserID(int userID) {
this.result = result; this.userID = userID;
this.message = message;
} }
public String getResult() { public String getProfileID() {
return result; return profileID;
} }
public void setResult(String result) { public void setProfileID(String profileID) {
this.result = result; this.profileID = profileID;
} }
public String getMessage() { public User getUser() {
return message; return user;
} }
public void setMessage(String message) { public void setUser(User user) {
this.message = message; this.user = user;
} }
} }
...@@ -4,12 +4,13 @@ import android.arch.persistence.room.ColumnInfo; ...@@ -4,12 +4,13 @@ import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity; import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey; import android.arch.persistence.room.PrimaryKey;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import java.util.List; import java.util.List;
@Entity(tableName = "users") @Entity(tableName = "users")
class User { public class User {
@PrimaryKey(autoGenerate = true) @PrimaryKey(autoGenerate = true)
int db_id; int db_id;
...@@ -160,4 +161,13 @@ class User { ...@@ -160,4 +161,13 @@ class User {
public void setUserFollowedBodiesID(List<String> userFollowedBodiesID) { public void setUserFollowedBodiesID(List<String> userFollowedBodiesID) {
this.userFollowedBodiesID = userFollowedBodiesID; this.userFollowedBodiesID = userFollowedBodiesID;
} }
@Override
public String toString() {
return new Gson().toJson(this);
}
public static User fromString(String json) {
return new Gson().fromJson(json, User.class);
}
} }
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