Skip to content
Open
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
1 change: 0 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ dependencies {
compile 'com.squareup.picasso:picasso:2.4.0'
compile 'com.android.support:recyclerview-v7:22.2.0'
compile 'org.threeten:threetenbp:1.2'
compile 'com.koushikdutta.ion:ion:2.+'
compile 'com.github.johnkil.android-robototextview:robototextview:2.4.0'
compile 'com.jpardogo.materialtabstrip:library:1.0.9'
compile 'com.cocosw:bottomsheet:1.+@aar'
Expand Down
20 changes: 0 additions & 20 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -84,26 +84,6 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".libraries.LibrariesActivity"
android:label="@string/title_activity_libraries"
android:launchMode="singleTop"
android:theme="@style/Theme.MyTheme" />
<activity
android:name=".dining.activities.DiningActivity"
android:label="@string/title_activity_dining"
android:launchMode="singleTop"
android:theme="@style/Theme.MyTheme" />
<activity
android:name=".qrreader.QrreaderActivity"
android:label="@string/title_activity_qrreader"
android:launchMode="singleTop"
android:theme="@style/Theme.MyTheme" />
<activity
android:name=".links.LinksActivity"
android:label="@string/title_activity_links"
android:launchMode="singleTop"
android:theme="@style/Theme.MyTheme" />
<activity
android:name=".mobius.ResourcesActivity"
android:label="@string/title_activity_mobius"
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/assets/api.json
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,12 @@
"prod": "http://m.mit.edu/apis/secure/",
"manager": "edu.mit.mitmobile2.libraries.LibraryManager"
},
"login": {
"dev": "https://idp.mit.edu/idp/profile/SAML2/SOAP/ECP",
"test": "https://idp.mit.edu/idp/profile/SAML2/SOAP/ECP",
"prod": "https://idp.mit.edu/idp/profile/SAML2/SOAP/ECP",
"manager": "edu.mit.mitmobile2.libraries.LibraryManager"
},
"links": {
"dev": "http://mobile-dev.mit.edu/apis/",
"test": "http://mobile-test.mit.edu/apis/",
Expand Down
1 change: 1 addition & 0 deletions app/src/main/java/edu/mit/mitmobile2/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public class Constants {
public static final String MAP = "map";
public static final String LIBRARIES = "libraries";
public static final String SECURE = "secure";
public static final String LOGIN = "login";
public static final String LINKS = "links";
public static final String FACILITIES = "facilities";
public static final String SCANNER = "scanner";
Expand Down
53 changes: 41 additions & 12 deletions app/src/main/java/edu/mit/mitmobile2/RetrofitManager.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package edu.mit.mitmobile2;

import android.text.TextUtils;
import android.util.Base64;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
Expand All @@ -8,9 +11,13 @@
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.squareup.okhttp.OkHttpClient;

import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
Expand All @@ -26,6 +33,7 @@
import retrofit.Endpoint;
import retrofit.RequestInterceptor;
import retrofit.RestAdapter;
import retrofit.client.OkClient;
import retrofit.converter.GsonConverter;

public abstract class RetrofitManager {
Expand Down Expand Up @@ -65,6 +73,9 @@ public String getName() {
protected static HashMap<String, String> paths;
protected static HashMap<String, String> queries;

protected static String userName;
protected static String password;

private static MitEndpoint mitEndpoint = MitEndpoint.create();

private static RequestInterceptor requestInterceptor = new RequestInterceptor() {
Expand All @@ -83,21 +94,39 @@ public void intercept(RequestFacade request) {
}
queries.clear();
}

if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(password)) {
String credentials = userName + ":" + password;
String base64EncodedCredentials = new String(Base64.encode(credentials.getBytes(), Base64.NO_WRAP));
request.addHeader("Authorization", "Basic " + base64EncodedCredentials);
}
}
};

protected static RestAdapter MIT_REST_ADAPTER = new RestAdapter.Builder()
.setEndpoint(mitEndpoint)
.setConverter(new GsonConverter(gson))
.setLog(new RestAdapter.Log() {
@Override
public void log(String message) {
Timber.d(message);
}
})
.setRequestInterceptor(requestInterceptor)
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
protected static RestAdapter MIT_REST_ADAPTER;

static {
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER);

OkHttpClient client = new OkHttpClient();
client.setCookieHandler(cookieManager);

OkClient restServiceClient = new OkClient(client);
MIT_REST_ADAPTER = new RestAdapter.Builder()
.setEndpoint(mitEndpoint)
.setClient(restServiceClient)
.setConverter(new GsonConverter(gson))
.setLog(new RestAdapter.Log() {
@Override
public void log(String message) {
Timber.d(message);
}
})
.setRequestInterceptor(requestInterceptor)
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
}

public static void changeEndpoint(String url) {
if (mitEndpoint.getUrl() != null) {
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import edu.mit.mitmobile2.MitMobileApplication;
import edu.mit.mitmobile2.OttoBusEvent;
import edu.mit.mitmobile2.R;
import edu.mit.mitmobile2.libraries.activities.AccountActivity;
import edu.mit.mitmobile2.libraries.activities.LibraryLoginActivity;
import edu.mit.mitmobile2.libraries.adapter.LibraryLinksAdapter;
import edu.mit.mitmobile2.libraries.model.MITLibrariesLink;
import edu.mit.mitmobile2.shared.SharedIntentManager;
Expand Down Expand Up @@ -91,7 +91,7 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
headerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), AccountActivity.class);
Intent intent = new Intent(getActivity(), LibraryLoginActivity.class);
startActivity(intent);
}
});
Expand Down Expand Up @@ -134,10 +134,11 @@ public void failure(RetrofitError error) {
private void refreshLinks(List<MITLibrariesLink> mitLibrariesLink) {
links.clear();
if (mitLibrariesLink != null) {
// append predefined links here
String[] predefinedLinks = getResources().getStringArray(R.array.predefined_link_titles);
for (String title : predefinedLinks) {
links.add(new MITLibrariesLink(title));
// add predefined links here
String[] predefinedTitles = getResources().getStringArray(R.array.predefined_link_titles);
String[] predefinedLinks = getResources().getStringArray(R.array.predefined_links);
for (int i = 0; i < predefinedLinks.length; i++) {
links.add(new MITLibrariesLink(predefinedTitles[i], predefinedLinks[i]));
}
links.addAll(mitLibrariesLink);
}
Expand Down
74 changes: 68 additions & 6 deletions app/src/main/java/edu/mit/mitmobile2/libraries/LibraryManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,34 @@
import edu.mit.mitmobile2.libraries.model.MITLibrariesWorldcatItem;
import edu.mit.mitmobile2.shared.logging.LoggingManager;
import retrofit.Callback;
import retrofit.client.Response;
import retrofit.http.Body;
import retrofit.http.GET;
import retrofit.http.Headers;
import retrofit.http.POST;
import retrofit.mime.TypedString;

/**
* Created by grmartin on 5/7/15.
*/
public class LibraryManager extends RetrofitManager {
private static final MitLibraryService MIT_LIBRARY_SERVICE = MIT_REST_ADAPTER.create(MitLibraryService.class);
private static final MitSecureService MIT_SECURE_SERVICE = MIT_REST_ADAPTER.create(MitSecureService.class);

private static final int LIBRARY_ITEMS_SEARCH_LIMIT = 20;

@SuppressWarnings("unused")
public static void makeHttpCall(String apiType, String path, HashMap<String, String> pathParams, HashMap<String, String> queryParams, Object callback)
throws NoSuchFieldException, NoSuchMethodException, ClassNotFoundException, IllegalAccessException, InvocationTargetException {

Method m = findMethodViaDirectReflection(MitLibraryService.class, path, pathParams, queryParams, Callback.class);
LoggingManager.Timber.d("Method = " + m);
m.invoke(MIT_LIBRARY_SERVICE, callback);
if (apiType.equals(Constants.SECURE) && path.equals(Constants.Secure.SECURE_USER_PATH)) {
Method m = findMethodViaDirectReflection(MitSecureService.class, path, pathParams, queryParams, Callback.class);
LoggingManager.Timber.d("Method = " + m);

m.invoke(MIT_SECURE_SERVICE, callback);
} else {
Method m = findMethodViaDirectReflection(MitLibraryService.class, path, pathParams, queryParams, Callback.class);
LoggingManager.Timber.d("Method = " + m);

m.invoke(MIT_LIBRARY_SERVICE, callback);
}
}

@SuppressWarnings("unused")
Expand Down Expand Up @@ -113,6 +124,36 @@ public static LibraryManagerCall getIdentity(Activity activity, Callback<MITLibr
return returnValue;
}

public static LibraryManagerCall getLoginAuth(Activity activity, Callback<Response> callback) {
LibraryManagerCallWrapper<?> returnValue = new LibraryManagerCallWrapper<>(new MITAPIClient(activity), callback);

returnValue.getClient().get(Constants.SECURE, Constants.Secure.SECURE_USER_PATH, null, null, returnValue);

return returnValue;
}

public static LibraryManagerCall loginUser(Activity activity, Callback<Response> callback) {
LibraryManagerCallWrapper<?> returnValue = new LibraryManagerCallWrapper<>(new MITAPIClient(activity), callback);

returnValue.getClient().get(Constants.LOGIN, "/", null, null, returnValue);

return returnValue;
}

public static void postLoginToIdp(TypedString body, Callback<Response> callback) {
MIT_SECURE_SERVICE._postloginuser(body, callback);
}

public static void postAuthToShibboleth(TypedString body, Callback<Response> callback) {
MIT_SECURE_SERVICE._postloginuser2(body, callback);
}


public static void setUsernameAndPassword(String username, String password) {
RetrofitManager.userName = username;
RetrofitManager.password = password;
}

/* POST requests */

public interface MitLibraryService {
Expand All @@ -138,6 +179,27 @@ public interface MitLibraryService {
void _getuser(Callback<MITLibrariesMITIdentity> callback);
}

public interface MitSecureService {
@Headers({
"Accept: application/vnd.paos+xml,*/*",
"PAOS: ver=\"urn:liberty:paos:2003-08\"; \"urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp\";"
})
@GET(Constants.Secure.SECURE_USER_PATH)
void _getsecure(Callback<Response> callback);

@Headers({
"Content-Type: application/vnd.paos+xml"
})
@POST("/idp/profile/SAML2/SOAP/ECP")
void _postloginuser(@Body TypedString obj, Callback<Response> callback);

@Headers({
"Content-Type: application/vnd.paos+xml"
})
@POST("/SAML2/ECP")
void _postloginuser2(@Body TypedString obj, Callback<Response> callback);
}

public static class LibraryManagerCallWrapper<T> extends MITAPIClient.ApiCallWrapper<T> implements LibraryManagerCall, Callback<T> {
public LibraryManagerCallWrapper(MITAPIClient client, Callback<T> callback) {
super(client, callback);
Expand Down
Loading