package com.eveningoutpost.dexdrip.Models; import android.provider.BaseColumns; import android.util.Log; import com.activeandroid.Model; import com.activeandroid.annotation.Column; import com.activeandroid.annotation.Table; import com.activeandroid.query.Select; import com.eveningoutpost.dexdrip.Interfaces.UserInterface; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; import com.google.gson.internal.bind.DateTypeAdapter; import java.util.Date; import retrofit.Callback; import retrofit.RestAdapter; import retrofit.RetrofitError; import retrofit.client.Response; import retrofit.converter.GsonConverter; /** * Created by stephenblack on 11/7/14. */ @Table(name = "User", id = BaseColumns._ID) public class User extends Model { private static final String baseUrl = "http://10.0.2.2:3000"; public static Gson gson = new GsonBuilder() .excludeFieldsWithoutExposeAnnotation() .registerTypeAdapter(Date.class, new DateTypeAdapter()) .create(); @Expose @Column(name = "email") public String email; @Expose @Column(name = "password") public String password; @Expose @Column(name = "token") public String token; @Expose @Column(name = "token_expiration") public double token_expiration; @Expose @Column(name = "uuid", index = true) public String uuid; public static User currentUser() { User user = new Select() .from(User.class) .orderBy("_ID desc") .limit(1) .executeSingle(); return user; } //TODO: Add refresh token attempt instance method!! public static void authenticate() { final User user = User.currentUser(); userInterface().authenticate(user, new Callback<String>() { @Override public void success(String gsonResponse, Response response) { JsonObject jobj = new Gson().fromJson(gsonResponse, JsonObject.class); user.token = jobj.get("token").getAsString(); user.token_expiration = jobj.get("expiration").getAsDouble(); user.save(); } @Override public void failure(RetrofitError error) { Response response = error.getResponse(); Log.w("REST CALL ERROR:", "****************"); Log.w("REST CALL STATUS:", "" + response.getStatus()); Log.w("REST CALL REASON:", response.getReason()); } } ); } public static UserInterface userInterface() { RestAdapter adapter = adapterBuilder().build(); UserInterface userInterface = adapter.create(UserInterface.class); return userInterface(); } public static RestAdapter.Builder adapterBuilder() { RestAdapter.Builder adapterBuilder = new RestAdapter.Builder(); adapterBuilder .setEndpoint(baseUrl) .setConverter(new GsonConverter(gson)); return adapterBuilder; } }