From ad27db1a471d3935e36daa39bbdd5d3e2fd682be Mon Sep 17 00:00:00 2001 From: Domagalski Date: Tue, 21 Aug 2018 23:41:07 +0200 Subject: [PATCH] Integraded retrofit, created LdapService with api endpoints. LdapUser + JwtToken models. Getting proper jwt token after fakeValidate - now need to implement it on login and save in SharedPreferences(localstorage) --- .idea/caches/build_file_checksums.ser | Bin 537 -> 537 bytes app/build.gradle | 3 + app/src/main/AndroidManifest.xml | 7 +- .../{ => activity}/LoginActivity.java | 77 +++++++++++--- .../{ => activity}/MainActivity.java | 6 +- .../{ => activity}/StartupActivity.java | 13 ++- .../uam/wmi/findmytutor/model/JwtToken.java | 20 ++++ .../uam/wmi/findmytutor/model/LdapUser.java | 96 ++++++++++++++++++ .../network/NetworkConnectionInterceptor.java | 32 ++++++ .../network/RetrofitClientInstance.java | 71 +++++++++++++ .../wmi/findmytutor/service/LdapService.java | 26 +++++ .../uam/wmi/findmytutor/service/Session.java | 4 + app/src/main/res/layout/activity_login.xml | 2 +- app/src/main/res/layout/activity_main.xml | 2 +- app/src/main/res/layout/activity_startup.xml | 2 +- app/src/main/res/layout/content_main.xml | 2 +- 16 files changed, 341 insertions(+), 22 deletions(-) rename app/src/main/java/com/uam/wmi/findmytutor/{ => activity}/LoginActivity.java (83%) rename app/src/main/java/com/uam/wmi/findmytutor/{ => activity}/MainActivity.java (86%) rename app/src/main/java/com/uam/wmi/findmytutor/{ => activity}/StartupActivity.java (80%) create mode 100644 app/src/main/java/com/uam/wmi/findmytutor/model/JwtToken.java create mode 100644 app/src/main/java/com/uam/wmi/findmytutor/model/LdapUser.java create mode 100644 app/src/main/java/com/uam/wmi/findmytutor/network/NetworkConnectionInterceptor.java create mode 100644 app/src/main/java/com/uam/wmi/findmytutor/network/RetrofitClientInstance.java create mode 100644 app/src/main/java/com/uam/wmi/findmytutor/service/LdapService.java create mode 100644 app/src/main/java/com/uam/wmi/findmytutor/service/Session.java diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 4bef4ba720c2ad51e20362d3519de5be1d1260c0..0349eb789b5963e54a80a5c2d6dc8162ad8c714f 100644 GIT binary patch delta 35 tcmV+;0NnqX1epYom;^sudNq-pcMxDkhNc}y{^qT;3GUBLYwD9D0rmrQ5A^^5 delta 35 tcmV+;0NnqX1epYom;^90MD3BBcMxil7lnL + - @@ -25,13 +26,13 @@ loginResponse = service.fakeValidate(user).execute(); + if (loginResponse.isSuccessful()) { + String authToken = loginResponse.body().getToken(); + Log.e("Login", "jwt token: " + authToken); + + SharedPreferences sharedPref = getSharedPreferences("fmtPrefs", Context.MODE_PRIVATE); + sharedPref.edit().putString("authToken", authToken).putBoolean("loggedIn", true).apply(); + + return true; + } + + } catch (IOException e) { + Log.e("Login error", "nie udalo sie kurde..."); return false; } - for (String credential : DUMMY_CREDENTIALS) { - String[] pieces = credential.split(":"); - if (pieces[0].equals(mEmail)) { - // Account exists, return true if the password matches. - return pieces[1].equals(mPassword); - } - } + //To jest async i nie da sie zwrocic :( +// Call call = service.fakeValidate(user); +// +// call.enqueue(new Callback() { +// @Override +// public void onResponse(Call call, Response response) { +// Log.e("jwt", response.body().getToken()); +// } +// +// @Override +// public void onFailure(Call call, Throwable t) { +// Toast.makeText(LoginActivity.this, "Something went wrong...Please try later!", Toast.LENGTH_SHORT).show(); +// return false; +// } +// }); + + + + // TODO: attempt authentication against a network service. + +// try { +// // Simulate network access. +// Thread.sleep(2000); +// } catch (InterruptedException e) { +// return false; +// } +// +// for (String credential : DUMMY_CREDENTIALS) { +// String[] pieces = credential.split(":"); +// if (pieces[0].equals(mEmail)) { +// // Account exists, return true if the password matches. +// return pieces[1].equals(mPassword); +// } +// } // TODO: register the new account here. return false; diff --git a/app/src/main/java/com/uam/wmi/findmytutor/MainActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/MainActivity.java similarity index 86% rename from app/src/main/java/com/uam/wmi/findmytutor/MainActivity.java rename to app/src/main/java/com/uam/wmi/findmytutor/activity/MainActivity.java index fbb379a..3341ffc 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/MainActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/MainActivity.java @@ -1,4 +1,4 @@ -package com.uam.wmi.findmytutor; +package com.uam.wmi.findmytutor.activity; import android.content.Context; import android.content.SharedPreferences; @@ -10,6 +10,8 @@ import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.View; +import com.uam.wmi.findmytutor.R; + public class MainActivity extends AppCompatActivity { @Override @@ -18,7 +20,7 @@ public class MainActivity extends AppCompatActivity { setContentView(R.layout.activity_main); SharedPreferences sharedPref = getSharedPreferences("fmtPrefs", Context.MODE_PRIVATE); String text = sharedPref.getString("test",null); - Log.e("okurwaMainactivity", text); + Log.e("Mainactivity", text); } } diff --git a/app/src/main/java/com/uam/wmi/findmytutor/StartupActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/StartupActivity.java similarity index 80% rename from app/src/main/java/com/uam/wmi/findmytutor/StartupActivity.java rename to app/src/main/java/com/uam/wmi/findmytutor/activity/StartupActivity.java index e9c3e65..17ec17b 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/StartupActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/StartupActivity.java @@ -1,10 +1,21 @@ -package com.uam.wmi.findmytutor; +package com.uam.wmi.findmytutor.activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.util.Log; +import android.widget.Toast; + +import com.uam.wmi.findmytutor.model.JwtToken; +import com.uam.wmi.findmytutor.model.LdapUser; +import com.uam.wmi.findmytutor.network.RetrofitClientInstance; +import com.uam.wmi.findmytutor.service.LdapService; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; public class StartupActivity extends AppCompatActivity { private static final int AUTHENTICATION_REQUEST_CODE = 666; diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/JwtToken.java b/app/src/main/java/com/uam/wmi/findmytutor/model/JwtToken.java new file mode 100644 index 0000000..0d04fc8 --- /dev/null +++ b/app/src/main/java/com/uam/wmi/findmytutor/model/JwtToken.java @@ -0,0 +1,20 @@ +package com.uam.wmi.findmytutor.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class JwtToken { + + @SerializedName("token") + @Expose + private String token; + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/LdapUser.java b/app/src/main/java/com/uam/wmi/findmytutor/model/LdapUser.java new file mode 100644 index 0000000..5bf06eb --- /dev/null +++ b/app/src/main/java/com/uam/wmi/findmytutor/model/LdapUser.java @@ -0,0 +1,96 @@ +package com.uam.wmi.findmytutor.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class LdapUser { + + @SerializedName("login") + @Expose + private String login; + @SerializedName("password") + @Expose + private String password; + @SerializedName("department") + @Expose + private String department; + @SerializedName("title") + @Expose + private String title; + @SerializedName("firstName") + @Expose + private String firstName; + @SerializedName("lastName") + @Expose + private String lastName; + @SerializedName("email") + @Expose + private String email; + + public LdapUser(String login, String password, String department, String title, String firstName, String lastName, String email) { + this.login = login; + this.password = password; + this.department = department; + this.title = title; + this.firstName = firstName; + this.lastName = lastName; + this.email = email; + } + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/uam/wmi/findmytutor/network/NetworkConnectionInterceptor.java b/app/src/main/java/com/uam/wmi/findmytutor/network/NetworkConnectionInterceptor.java new file mode 100644 index 0000000..f5732e3 --- /dev/null +++ b/app/src/main/java/com/uam/wmi/findmytutor/network/NetworkConnectionInterceptor.java @@ -0,0 +1,32 @@ +package com.uam.wmi.findmytutor.network; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +public abstract class NetworkConnectionInterceptor implements Interceptor { + + public abstract boolean isInternetAvailable(); + + public abstract void onInternetUnavailable(); + + public abstract void onCacheUnavailable(); + + @Override + public Response intercept(Chain chain) throws IOException { + Request request = chain.request(); + if (!isInternetAvailable()) { + onInternetUnavailable(); + request = request.newBuilder().header("Cache-Control", + "public, only-if-cached, max-stale=" + 60 * 60 * 24).build(); + Response response = chain.proceed(request); + if (response.cacheResponse() == null) { + onCacheUnavailable(); + } + return response; + } + return chain.proceed(request); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uam/wmi/findmytutor/network/RetrofitClientInstance.java b/app/src/main/java/com/uam/wmi/findmytutor/network/RetrofitClientInstance.java new file mode 100644 index 0000000..d537f97 --- /dev/null +++ b/app/src/main/java/com/uam/wmi/findmytutor/network/RetrofitClientInstance.java @@ -0,0 +1,71 @@ +package com.uam.wmi.findmytutor.network; + +import java.util.concurrent.TimeUnit; + +import okhttp3.OkHttpClient; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class RetrofitClientInstance { + private static Retrofit retrofit; + private static final String BASE_URL = "https://s416084.projektstudencki.pl/develop/"; + + + public static Retrofit getRetrofitLoginInstance() { + if (retrofit == null) { + retrofit = new retrofit2.Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build(); + } + return retrofit; + } + + public static Retrofit getRetrofitInstance() { + if (retrofit == null) { + retrofit = new retrofit2.Retrofit.Builder() + .baseUrl(BASE_URL) + .client(provideOkHttpClient()) + .addConverterFactory(GsonConverterFactory.create()) + .build(); + } + return retrofit; + } + + private static OkHttpClient provideOkHttpClient() { + OkHttpClient.Builder okhttpClientBuilder = new OkHttpClient.Builder(); + okhttpClientBuilder.connectTimeout(30, TimeUnit.SECONDS); + okhttpClientBuilder.readTimeout(30, TimeUnit.SECONDS); + okhttpClientBuilder.writeTimeout(30, TimeUnit.SECONDS); + return okhttpClientBuilder.build(); + } + +// +// private OkHttpClient provideokHttpClient() { +// OkHttpClient.Builder okhttpClientBuilder = new OkHttpClient.Builder(); +// okhttpClientBuilder.connectTimeout(30, TimeUnit.SECONDS); +// okhttpClientBuilder.readTimeout(30, TimeUnit.SECONDS); +// okhttpClientBuilder.writeTimeout(30, TimeUnit.SECONDS); +// +// okhttpClientBuilder.addInterceptor(new NetworkConnectionInterceptor() { +// @Override +// public boolean isInternetAvailable() { +// return this.isInternetAvailable(); +// } +// +// @Override +// public void onInternetUnavailable() { +// if (mInternetConnectionListener != null) { +// mInternetConnectionListener.onInternetUnavailable(); +// } +// } +// +// @Override +// public void onCacheUnavailable() { +// if (mInternetConnectionListener != null) { +// mInternetConnectionListener.onCacheUnavailable(); +// } +// } +// }); +// } +} diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/LdapService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/LdapService.java new file mode 100644 index 0000000..3583d2a --- /dev/null +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/LdapService.java @@ -0,0 +1,26 @@ +package com.uam.wmi.findmytutor.service; + +import com.uam.wmi.findmytutor.model.JwtToken; +import com.uam.wmi.findmytutor.model.LdapUser; + +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Path; + +public interface LdapService { + + @POST("api/ldap/fakeValidate") + Call fakeValidate(@Body LdapUser user); + + @POST("api/ldap/validate") + Call validate(@Body LdapUser user); + + @GET("api/ldap/getUserData/{login}") + Call getUserDataByLogin(@Path("login") String userLogin); + + @GET("api/ldap/getUserData/email/{email}") + Call getUserDataByMail(@Path("email") String userMail); +} + diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/Session.java b/app/src/main/java/com/uam/wmi/findmytutor/service/Session.java new file mode 100644 index 0000000..20a6a58 --- /dev/null +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/Session.java @@ -0,0 +1,4 @@ +package com.uam.wmi.findmytutor.service; + +public interface Session { +} diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index ff0a08b..6784ef7 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -9,7 +9,7 @@ android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" - tools:context=".LoginActivity"> + tools:context=".activity.LoginActivity"> + tools:context=".activity.MainActivity"> + tools:context=".activity.StartupActivity"> \ No newline at end of file diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index c649451..0be3b43 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" - tools:context=".MainActivity" + tools:context=".activity.MainActivity" tools:showIn="@layout/activity_main"> \ No newline at end of file