Rewrite authentication handling
Fix logout not working until restart
This commit is contained in:
@@ -10,11 +10,14 @@ import eu.crushedpixel.replaymod.gui.online.GuiReplayDownloading;
|
|||||||
import eu.crushedpixel.replaymod.gui.overlay.GuiReplayOverlay;
|
import eu.crushedpixel.replaymod.gui.overlay.GuiReplayOverlay;
|
||||||
import eu.crushedpixel.replaymod.holders.KeyframeSet;
|
import eu.crushedpixel.replaymod.holders.KeyframeSet;
|
||||||
import eu.crushedpixel.replaymod.localization.LocalizedResourcePack;
|
import eu.crushedpixel.replaymod.localization.LocalizedResourcePack;
|
||||||
import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler;
|
import eu.crushedpixel.replaymod.online.authentication.ConfigurationAuthData;
|
||||||
import eu.crushedpixel.replaymod.online.urischeme.UriScheme;
|
import eu.crushedpixel.replaymod.online.urischeme.UriScheme;
|
||||||
import eu.crushedpixel.replaymod.recording.ConnectionEventHandler;
|
import eu.crushedpixel.replaymod.recording.ConnectionEventHandler;
|
||||||
import eu.crushedpixel.replaymod.registry.*;
|
import eu.crushedpixel.replaymod.registry.*;
|
||||||
import eu.crushedpixel.replaymod.renderer.*;
|
import eu.crushedpixel.replaymod.renderer.CustomObjectRenderer;
|
||||||
|
import eu.crushedpixel.replaymod.renderer.InvisibilityRender;
|
||||||
|
import eu.crushedpixel.replaymod.renderer.PathPreviewRenderer;
|
||||||
|
import eu.crushedpixel.replaymod.renderer.SpectatorRenderer;
|
||||||
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
||||||
import eu.crushedpixel.replaymod.replay.ReplayProcess;
|
import eu.crushedpixel.replaymod.replay.ReplayProcess;
|
||||||
import eu.crushedpixel.replaymod.replay.ReplaySender;
|
import eu.crushedpixel.replaymod.replay.ReplaySender;
|
||||||
@@ -83,7 +86,6 @@ public class ReplayMod {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final String MODID = "replaymod";
|
public static final String MODID = "replaymod";
|
||||||
public static final ApiClient apiClient = new ApiClient();
|
|
||||||
private static final Minecraft mc = Minecraft.getMinecraft();
|
private static final Minecraft mc = Minecraft.getMinecraft();
|
||||||
public static GuiEventHandler guiEventHandler;
|
public static GuiEventHandler guiEventHandler;
|
||||||
public static GuiReplayOverlay overlay;
|
public static GuiReplayOverlay overlay;
|
||||||
@@ -107,6 +109,7 @@ public class ReplayMod {
|
|||||||
public static CustomObjectRenderer customObjectRenderer;
|
public static CustomObjectRenderer customObjectRenderer;
|
||||||
public static SoundHandler soundHandler = new SoundHandler();
|
public static SoundHandler soundHandler = new SoundHandler();
|
||||||
public static CrosshairRenderHandler crosshairRenderHandler;
|
public static CrosshairRenderHandler crosshairRenderHandler;
|
||||||
|
public static ApiClient apiClient;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private static boolean latestModVersion = true;
|
private static boolean latestModVersion = true;
|
||||||
@@ -134,7 +137,9 @@ public class ReplayMod {
|
|||||||
|
|
||||||
config = new Configuration(event.getSuggestedConfigurationFile());
|
config = new Configuration(event.getSuggestedConfigurationFile());
|
||||||
config.load();
|
config.load();
|
||||||
AuthenticationHandler.loadAuthkeyFromConfig();
|
ConfigurationAuthData authData = new ConfigurationAuthData(config);
|
||||||
|
apiClient = new ApiClient(authData);
|
||||||
|
authData.load(apiClient);
|
||||||
|
|
||||||
uploadedFileHandler = new UploadedFileHandler(event.getModConfigurationDirectory());
|
uploadedFileHandler = new UploadedFileHandler(event.getModConfigurationDirectory());
|
||||||
|
|
||||||
|
|||||||
@@ -27,28 +27,66 @@ public class ApiClient {
|
|||||||
private static final Gson gson = new Gson();
|
private static final Gson gson = new Gson();
|
||||||
private static final JsonParser jsonParser = new JsonParser();
|
private static final JsonParser jsonParser = new JsonParser();
|
||||||
|
|
||||||
public AuthKey getLogin(String username, String password) throws IOException, ApiException {
|
private final AuthData authData;
|
||||||
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.login);
|
|
||||||
builder.put("user", username);
|
public ApiClient(AuthData authData) {
|
||||||
builder.put("pw", password);
|
this.authData = authData;
|
||||||
builder.put("mod", true);
|
|
||||||
return invokeAndReturn(builder, AuthKey.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public AuthKey register(String username, String mail, String password, String uuid)
|
public boolean isLoggedIn() {
|
||||||
throws IOException, ApiException, AuthenticationException {
|
return authData.getUserName() != null && authData.getAuthKey() != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthKey() {
|
||||||
|
return authData.getAuthKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void register(String userName, String eMail, String password) throws AuthenticationException, IOException, ApiException {
|
||||||
AuthenticationHash authenticationHash = sessionserverJoin();
|
AuthenticationHash authenticationHash = sessionserverJoin();
|
||||||
|
|
||||||
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.register);
|
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.register);
|
||||||
builder.put("username", username);
|
builder.put("username", userName);
|
||||||
builder.put("email", mail);
|
builder.put("email", eMail);
|
||||||
builder.put("password", password);
|
builder.put("password", password);
|
||||||
builder.put("uuid", uuid);
|
builder.put("uuid", mc.getSession().getProfile().getId().toString());
|
||||||
builder.put("mcusername", authenticationHash.username);
|
builder.put("mcusername", authenticationHash.username);
|
||||||
builder.put("timelong", authenticationHash.currentTime);
|
builder.put("timelong", authenticationHash.currentTime);
|
||||||
builder.put("randomlong", authenticationHash.randomLong);
|
builder.put("randomlong", authenticationHash.randomLong);
|
||||||
return invokeAndReturn(builder, AuthKey.class);
|
AuthKey auth = invokeAndReturn(builder, AuthKey.class);
|
||||||
|
|
||||||
|
authData.setData(userName, auth.getAuth());
|
||||||
|
}
|
||||||
|
|
||||||
|
public AuthData.AuthResult login(String userName, String password) {
|
||||||
|
try {
|
||||||
|
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.login);
|
||||||
|
builder.put("user", userName);
|
||||||
|
builder.put("pw", password);
|
||||||
|
builder.put("mod", true);
|
||||||
|
AuthKey result = invokeAndReturn(builder, AuthKey.class);
|
||||||
|
authData.setData(userName, result.getAuth());
|
||||||
|
return AuthData.AuthResult.SUCCESS;
|
||||||
|
} catch(ApiException e) {
|
||||||
|
return AuthData.AuthResult.INVALID_DATA;
|
||||||
|
} catch(Exception e) {
|
||||||
|
return AuthData.AuthResult.IO_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public AuthData.AuthResult logout() {
|
||||||
|
try {
|
||||||
|
authData.setData(null, null);
|
||||||
|
|
||||||
|
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.logout);
|
||||||
|
builder.put("auth", authData.getAuthKey());
|
||||||
|
builder.put("mod", true);
|
||||||
|
invokeAndReturn(builder, Success.class);
|
||||||
|
return AuthData.AuthResult.SUCCESS;
|
||||||
|
} catch(ApiException e) {
|
||||||
|
return AuthData.AuthResult.INVALID_DATA;
|
||||||
|
} catch(Exception e) {
|
||||||
|
return AuthData.AuthResult.IO_ERROR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private AuthenticationHash sessionserverJoin() throws AuthenticationException {
|
private AuthenticationHash sessionserverJoin() throws AuthenticationException {
|
||||||
@@ -70,21 +108,6 @@ public class ApiClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean logout(String auth) throws IOException, ApiException {
|
|
||||||
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.logout);
|
|
||||||
builder.put("auth", auth);
|
|
||||||
builder.put("mod", true);
|
|
||||||
Success succ = invokeAndReturn(builder, Success.class);
|
|
||||||
return succ.isSuccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasDonated(String uuid) throws IOException, ApiException {
|
|
||||||
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.check_auth);
|
|
||||||
builder.put("uuid", uuid);
|
|
||||||
Donated succ = invokeAndReturn(builder, Donated.class);
|
|
||||||
return succ.hasDonated();
|
|
||||||
}
|
|
||||||
|
|
||||||
public FileInfo[] getFileInfo(List<Integer> ids) throws IOException, ApiException {
|
public FileInfo[] getFileInfo(List<Integer> ids) throws IOException, ApiException {
|
||||||
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.file_details);
|
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.file_details);
|
||||||
builder.put("id", buildListString(ids));
|
builder.put("id", buildListString(ids));
|
||||||
@@ -111,11 +134,11 @@ public class ApiClient {
|
|||||||
|
|
||||||
private boolean cancelDownload = false;
|
private boolean cancelDownload = false;
|
||||||
|
|
||||||
public void downloadFile(String auth, int file, File target, ProgressUpdateListener listener) throws IOException, ApiException {
|
public void downloadFile(int file, File target, ProgressUpdateListener listener) throws IOException, ApiException {
|
||||||
cancelDownload = false;
|
cancelDownload = false;
|
||||||
|
|
||||||
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.download_file);
|
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.download_file);
|
||||||
builder.put("auth", auth);
|
builder.put("auth", authData.getAuthKey());
|
||||||
builder.put("id", file);
|
builder.put("id", file);
|
||||||
String url = builder.toString();
|
String url = builder.toString();
|
||||||
URL website = new URL(url);
|
URL website = new URL(url);
|
||||||
@@ -167,40 +190,40 @@ public class ApiClient {
|
|||||||
this.cancelDownload = true;
|
this.cancelDownload = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void rateFile(String auth, int file, Rating.RatingType rating) throws IOException, ApiException {
|
public void rateFile(int file, Rating.RatingType rating) throws IOException, ApiException {
|
||||||
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.rate_file);
|
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.rate_file);
|
||||||
builder.put("auth", auth);
|
builder.put("auth", authData.getAuthKey());
|
||||||
builder.put("id", file);
|
builder.put("id", file);
|
||||||
builder.put("rating", rating.getKey());
|
builder.put("rating", rating.getKey());
|
||||||
invokeAndReturn(builder, Success.class);
|
invokeAndReturn(builder, Success.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FileRating[] getRatedFiles(String auth) throws IOException, ApiException {
|
public FileRating[] getRatedFiles() throws IOException, ApiException {
|
||||||
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.get_ratings);
|
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.get_ratings);
|
||||||
builder.put("auth", auth);
|
builder.put("auth", authData.getAuthKey());
|
||||||
|
|
||||||
return invokeAndReturn(builder, RatedFiles.class).getRated();
|
return invokeAndReturn(builder, RatedFiles.class).getRated();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void favFile(String auth, int file, boolean fav) throws IOException, ApiException {
|
public void favFile(int file, boolean fav) throws IOException, ApiException {
|
||||||
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.fav_file);
|
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.fav_file);
|
||||||
builder.put("auth", auth);
|
builder.put("auth", authData.getAuthKey());
|
||||||
builder.put("id", file);
|
builder.put("id", file);
|
||||||
builder.put("fav", fav);
|
builder.put("fav", fav);
|
||||||
invokeAndReturn(builder, Success.class);
|
invokeAndReturn(builder, Success.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int[] getFavorites(String auth) throws IOException, ApiException {
|
public int[] getFavorites() throws IOException, ApiException {
|
||||||
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.get_favorites);
|
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.get_favorites);
|
||||||
builder.put("auth", auth);
|
builder.put("auth", authData.getAuthKey());
|
||||||
|
|
||||||
return invokeAndReturn(builder, Favorites.class).getFavorited();
|
return invokeAndReturn(builder, Favorites.class).getFavorited();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Api
|
@Api
|
||||||
public void removeFile(String auth, int file) throws IOException, ApiException {
|
public void removeFile(int file) throws IOException, ApiException {
|
||||||
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.remove_file);
|
QueryBuilder builder = new QueryBuilder(ReplayModApiMethods.remove_file);
|
||||||
builder.put("auth", auth);
|
builder.put("auth", authData.getAuthKey());
|
||||||
builder.put("id", file);
|
builder.put("id", file);
|
||||||
invokeAndReturn(builder, Success.class);
|
invokeAndReturn(builder, Success.class);
|
||||||
}
|
}
|
||||||
|
|||||||
45
src/main/java/eu/crushedpixel/replaymod/api/AuthData.java
Normal file
45
src/main/java/eu/crushedpixel/replaymod/api/AuthData.java
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
package eu.crushedpixel.replaymod.api;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a set of persistent authentication data.
|
||||||
|
*/
|
||||||
|
public interface AuthData {
|
||||||
|
/**
|
||||||
|
* Returns the user name of the authenticated user.
|
||||||
|
* @return user name or {@code null} if not logged in
|
||||||
|
*/
|
||||||
|
String getUserName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the authentication key of the authenticated user.
|
||||||
|
* @return auth key or {@code null} if not logged in
|
||||||
|
*/
|
||||||
|
String getAuthKey();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store the authentication data after login.
|
||||||
|
* @param userName The user name
|
||||||
|
* @param authKey The authentication key
|
||||||
|
*/
|
||||||
|
void setData(String userName, String authKey);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Result of authentication operations.
|
||||||
|
*/
|
||||||
|
enum AuthResult {
|
||||||
|
/**
|
||||||
|
* The operation succeeded without errors.
|
||||||
|
*/
|
||||||
|
SUCCESS,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The data provided got rejected due to it being invalid.
|
||||||
|
*/
|
||||||
|
INVALID_DATA,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operation could not be performed due to connectivity problems.
|
||||||
|
*/
|
||||||
|
IO_ERROR,
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package eu.crushedpixel.replaymod.api.replay;
|
package eu.crushedpixel.replaymod.api.replay;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
import eu.crushedpixel.replaymod.ReplayMod;
|
||||||
import eu.crushedpixel.replaymod.api.replay.holders.ApiError;
|
import eu.crushedpixel.replaymod.api.replay.holders.ApiError;
|
||||||
import eu.crushedpixel.replaymod.api.replay.holders.Category;
|
import eu.crushedpixel.replaymod.api.replay.holders.Category;
|
||||||
import eu.crushedpixel.replaymod.gui.online.GuiUploadFile;
|
import eu.crushedpixel.replaymod.gui.online.GuiUploadFile;
|
||||||
@@ -23,7 +24,7 @@ public class FileUploader {
|
|||||||
|
|
||||||
private GuiUploadFile parent;
|
private GuiUploadFile parent;
|
||||||
|
|
||||||
public void uploadFile(GuiUploadFile gui, String auth, String filename, List<String> tags, File file, Category category, String description) {
|
public void uploadFile(GuiUploadFile gui, String filename, List<String> tags, File file, Category category, String description) {
|
||||||
boolean success = false;
|
boolean success = false;
|
||||||
String info = null;
|
String info = null;
|
||||||
|
|
||||||
@@ -35,7 +36,7 @@ public class FileUploader {
|
|||||||
if(uploading) throw new RuntimeException("FileUploader is already uploading");
|
if(uploading) throw new RuntimeException("FileUploader is already uploading");
|
||||||
uploading = true;
|
uploading = true;
|
||||||
|
|
||||||
String postData = "?auth=" + auth + "&category=" + category.getId();
|
String postData = "?auth=" + ReplayMod.apiClient.getAuthKey() + "&category=" + category.getId();
|
||||||
|
|
||||||
if(tags.size() > 0) {
|
if(tags.size() > 0) {
|
||||||
postData += "&tags=";
|
postData += "&tags=";
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import eu.crushedpixel.replaymod.gui.online.GuiLoginPrompt;
|
|||||||
import eu.crushedpixel.replaymod.gui.online.GuiReplayCenter;
|
import eu.crushedpixel.replaymod.gui.online.GuiReplayCenter;
|
||||||
import eu.crushedpixel.replaymod.gui.replayeditor.GuiReplayEditor;
|
import eu.crushedpixel.replaymod.gui.replayeditor.GuiReplayEditor;
|
||||||
import eu.crushedpixel.replaymod.gui.replayviewer.GuiReplayViewer;
|
import eu.crushedpixel.replaymod.gui.replayviewer.GuiReplayViewer;
|
||||||
import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler;
|
|
||||||
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
||||||
import eu.crushedpixel.replaymod.replay.ReplayProcess;
|
import eu.crushedpixel.replaymod.replay.ReplayProcess;
|
||||||
import eu.crushedpixel.replaymod.studio.VersionValidator;
|
import eu.crushedpixel.replaymod.studio.VersionValidator;
|
||||||
@@ -43,7 +42,7 @@ public class GuiEventHandler {
|
|||||||
if(event.gui instanceof GuiMainMenu) {
|
if(event.gui instanceof GuiMainMenu) {
|
||||||
if(ReplayMod.firstMainMenu) {
|
if(ReplayMod.firstMainMenu) {
|
||||||
ReplayMod.firstMainMenu = false;
|
ReplayMod.firstMainMenu = false;
|
||||||
if(!AuthenticationHandler.isAuthenticated()) {
|
if(!ReplayMod.apiClient.isLoggedIn()) {
|
||||||
event.gui = new GuiLoginPrompt(event.gui, event.gui, false).toMinecraft();
|
event.gui = new GuiLoginPrompt(event.gui, event.gui, false).toMinecraft();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -57,7 +56,7 @@ public class GuiEventHandler {
|
|||||||
if(ReplayHandler.isInReplay()) ReplayHandler.setInReplay(false);
|
if(ReplayHandler.isInReplay()) ReplayHandler.setInReplay(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!AuthenticationHandler.isAuthenticated()) return;
|
if(!ReplayMod.apiClient.isLoggedIn()) return;
|
||||||
|
|
||||||
if(event.gui instanceof GuiChat || event.gui instanceof GuiInventory) {
|
if(event.gui instanceof GuiChat || event.gui instanceof GuiInventory) {
|
||||||
if(ReplayHandler.isInReplay()) {
|
if(ReplayHandler.isInReplay()) {
|
||||||
@@ -74,7 +73,7 @@ public class GuiEventHandler {
|
|||||||
public void onDraw(DrawScreenEvent e) {
|
public void onDraw(DrawScreenEvent e) {
|
||||||
if(e.gui instanceof GuiMainMenu) {
|
if(e.gui instanceof GuiMainMenu) {
|
||||||
e.gui.drawString(mc.fontRendererObj, I18n.format("replaymod.title")+":", 5, 5, Color.WHITE.getRGB());
|
e.gui.drawString(mc.fontRendererObj, I18n.format("replaymod.title")+":", 5, 5, Color.WHITE.getRGB());
|
||||||
if(AuthenticationHandler.isAuthenticated()) {
|
if(ReplayMod.apiClient.isLoggedIn()) {
|
||||||
e.gui.drawString(mc.fontRendererObj, I18n.format("replaymod.gui.loggedin").toUpperCase(), 5, 15, DARK_GREEN.getRGB());
|
e.gui.drawString(mc.fontRendererObj, I18n.format("replaymod.gui.loggedin").toUpperCase(), 5, 15, DARK_GREEN.getRGB());
|
||||||
} else {
|
} else {
|
||||||
e.gui.drawString(mc.fontRendererObj, I18n.format("replaymod.gui.loggedout").toUpperCase(), 5, 15, DARK_RED.getRGB());
|
e.gui.drawString(mc.fontRendererObj, I18n.format("replaymod.gui.loggedout").toUpperCase(), 5, 15, DARK_RED.getRGB());
|
||||||
@@ -174,7 +173,7 @@ public class GuiEventHandler {
|
|||||||
if(event.button.id == GuiConstants.REPLAY_MANAGER_BUTTON_ID) {
|
if(event.button.id == GuiConstants.REPLAY_MANAGER_BUTTON_ID) {
|
||||||
mc.displayGuiScreen(new GuiReplayViewer());
|
mc.displayGuiScreen(new GuiReplayViewer());
|
||||||
} else if(event.button.id == GuiConstants.REPLAY_CENTER_BUTTON_ID) {
|
} else if(event.button.id == GuiConstants.REPLAY_CENTER_BUTTON_ID) {
|
||||||
if(AuthenticationHandler.isAuthenticated()) {
|
if(ReplayMod.apiClient.isLoggedIn()) {
|
||||||
mc.displayGuiScreen(new GuiReplayCenter());
|
mc.displayGuiScreen(new GuiReplayCenter());
|
||||||
} else {
|
} else {
|
||||||
mc.displayGuiScreen(new GuiLoginPrompt(event.gui, new GuiReplayCenter(), true).toMinecraft());
|
mc.displayGuiScreen(new GuiLoginPrompt(event.gui, new GuiReplayCenter(), true).toMinecraft());
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import de.johni0702.minecraft.gui.element.GuiLabel;
|
|||||||
import de.johni0702.minecraft.gui.element.GuiPasswordField;
|
import de.johni0702.minecraft.gui.element.GuiPasswordField;
|
||||||
import de.johni0702.minecraft.gui.element.GuiTextField;
|
import de.johni0702.minecraft.gui.element.GuiTextField;
|
||||||
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||||
|
import eu.crushedpixel.replaymod.ReplayMod;
|
||||||
import eu.crushedpixel.replaymod.gui.GuiConstants;
|
import eu.crushedpixel.replaymod.gui.GuiConstants;
|
||||||
import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler;
|
|
||||||
|
|
||||||
public class GuiLoginPrompt extends AbstractGuiScreen<GuiLoginPrompt> {
|
public class GuiLoginPrompt extends AbstractGuiScreen<GuiLoginPrompt> {
|
||||||
|
|
||||||
@@ -34,8 +34,8 @@ public class GuiLoginPrompt extends AbstractGuiScreen<GuiLoginPrompt> {
|
|||||||
new Thread(new Runnable() {
|
new Thread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
switch(AuthenticationHandler.authenticate(username.getText(), password.getText())) {
|
switch(ReplayMod.apiClient.login(username.getText(), password.getText())) {
|
||||||
case AuthenticationHandler.SUCCESS:
|
case SUCCESS:
|
||||||
statusLabel.setText("");
|
statusLabel.setText("");
|
||||||
getMinecraft().addScheduledTask(new Runnable() {
|
getMinecraft().addScheduledTask(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
@@ -44,10 +44,10 @@ public class GuiLoginPrompt extends AbstractGuiScreen<GuiLoginPrompt> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case AuthenticationHandler.INVALID:
|
case INVALID_DATA:
|
||||||
statusLabel.setI18nText("replaymod.gui.login.incorrect");
|
statusLabel.setI18nText("replaymod.gui.login.incorrect");
|
||||||
break;
|
break;
|
||||||
case AuthenticationHandler.NO_CONNECTION:
|
case IO_ERROR:
|
||||||
statusLabel.setI18nText("replaymod.gui.login.connectionerror");
|
statusLabel.setI18nText("replaymod.gui.login.connectionerror");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ import de.johni0702.minecraft.gui.element.*;
|
|||||||
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||||
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||||
import de.johni0702.minecraft.gui.layout.VerticalLayout;
|
import de.johni0702.minecraft.gui.layout.VerticalLayout;
|
||||||
|
import eu.crushedpixel.replaymod.ReplayMod;
|
||||||
import eu.crushedpixel.replaymod.api.ApiException;
|
import eu.crushedpixel.replaymod.api.ApiException;
|
||||||
import eu.crushedpixel.replaymod.gui.GuiConstants;
|
import eu.crushedpixel.replaymod.gui.GuiConstants;
|
||||||
import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler;
|
|
||||||
import eu.crushedpixel.replaymod.utils.EmailAddressUtils;
|
import eu.crushedpixel.replaymod.utils.EmailAddressUtils;
|
||||||
import eu.crushedpixel.replaymod.utils.RegexUtils;
|
import eu.crushedpixel.replaymod.utils.RegexUtils;
|
||||||
import net.minecraft.client.gui.FontRenderer;
|
import net.minecraft.client.gui.FontRenderer;
|
||||||
@@ -80,7 +80,7 @@ public class GuiRegister extends AbstractGuiScreen<GuiRegister> {
|
|||||||
String username = usernameInput.getText().trim();
|
String username = usernameInput.getText().trim();
|
||||||
String mail = mailInput.getText().trim();
|
String mail = mailInput.getText().trim();
|
||||||
String password = passwordInput.getText();
|
String password = passwordInput.getText();
|
||||||
AuthenticationHandler.register(username, mail, password);
|
ReplayMod.apiClient.register(username, mail, password);
|
||||||
|
|
||||||
getMinecraft().addScheduledTask(new Runnable() {
|
getMinecraft().addScheduledTask(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import eu.crushedpixel.replaymod.gui.GuiConstants;
|
|||||||
import eu.crushedpixel.replaymod.gui.elements.*;
|
import eu.crushedpixel.replaymod.gui.elements.*;
|
||||||
import eu.crushedpixel.replaymod.gui.replayviewer.GuiReplayViewer;
|
import eu.crushedpixel.replaymod.gui.replayviewer.GuiReplayViewer;
|
||||||
import eu.crushedpixel.replaymod.holders.GuiEntryListStringEntry;
|
import eu.crushedpixel.replaymod.holders.GuiEntryListStringEntry;
|
||||||
import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler;
|
|
||||||
import net.minecraft.client.gui.*;
|
import net.minecraft.client.gui.*;
|
||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
import org.lwjgl.input.Keyboard;
|
import org.lwjgl.input.Keyboard;
|
||||||
@@ -22,8 +21,9 @@ import org.lwjgl.input.Keyboard;
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Queue;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
|
|
||||||
public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback {
|
public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback {
|
||||||
@@ -59,7 +59,7 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback {
|
|||||||
Keyboard.enableRepeatEvents(true);
|
Keyboard.enableRepeatEvents(true);
|
||||||
|
|
||||||
if(!initialized) {
|
if(!initialized) {
|
||||||
if(!AuthenticationHandler.isAuthenticated()) {
|
if(!ReplayMod.apiClient.isLoggedIn()) {
|
||||||
mc.displayGuiScreen(new GuiLoginPrompt(new GuiMainMenu(), this, true).toMinecraft());
|
mc.displayGuiScreen(new GuiLoginPrompt(new GuiMainMenu(), this, true).toMinecraft());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,11 +73,11 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback {
|
|||||||
topBar.add(bestButton);
|
topBar.add(bestButton);
|
||||||
|
|
||||||
GuiButton downloadedReplayButton = new GuiButton(GuiConstants.CENTER_DOWNLOADED_REPLAYS_BUTTON, 20, 30, I18n.format("replaymod.gui.center.top.downloaded"));
|
GuiButton downloadedReplayButton = new GuiButton(GuiConstants.CENTER_DOWNLOADED_REPLAYS_BUTTON, 20, 30, I18n.format("replaymod.gui.center.top.downloaded"));
|
||||||
downloadedReplayButton.enabled = AuthenticationHandler.isAuthenticated();
|
downloadedReplayButton.enabled = ReplayMod.apiClient.isLoggedIn();
|
||||||
topBar.add(downloadedReplayButton);
|
topBar.add(downloadedReplayButton);
|
||||||
|
|
||||||
GuiButton favoritedReplayButton = new GuiButton(GuiConstants.CENTER_FAVORITED_REPLAYS_BUTTON, 20, 30, I18n.format("replaymod.gui.center.top.favorited"));
|
GuiButton favoritedReplayButton = new GuiButton(GuiConstants.CENTER_FAVORITED_REPLAYS_BUTTON, 20, 30, I18n.format("replaymod.gui.center.top.favorited"));
|
||||||
favoritedReplayButton.enabled = AuthenticationHandler.isAuthenticated();
|
favoritedReplayButton.enabled = ReplayMod.apiClient.isLoggedIn();
|
||||||
topBar.add(favoritedReplayButton);
|
topBar.add(favoritedReplayButton);
|
||||||
|
|
||||||
GuiButton searchButton = new GuiButton(GuiConstants.CENTER_SEARCH_BUTTON, 20, 30, I18n.format("replaymod.gui.center.top.search"));
|
GuiButton searchButton = new GuiButton(GuiConstants.CENTER_SEARCH_BUTTON, 20, 30, I18n.format("replaymod.gui.center.top.search"));
|
||||||
@@ -382,7 +382,7 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback {
|
|||||||
mc.addScheduledTask(new Runnable() {
|
mc.addScheduledTask(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
AuthenticationHandler.logout();
|
ReplayMod.apiClient.logout();
|
||||||
mc.displayGuiScreen(new GuiMainMenu());
|
mc.displayGuiScreen(new GuiMainMenu());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import eu.crushedpixel.replaymod.gui.GuiConstants;
|
|||||||
import eu.crushedpixel.replaymod.gui.elements.*;
|
import eu.crushedpixel.replaymod.gui.elements.*;
|
||||||
import eu.crushedpixel.replaymod.gui.elements.listeners.ProgressUpdateListener;
|
import eu.crushedpixel.replaymod.gui.elements.listeners.ProgressUpdateListener;
|
||||||
import eu.crushedpixel.replaymod.gui.replayviewer.GuiReplayViewer;
|
import eu.crushedpixel.replaymod.gui.replayviewer.GuiReplayViewer;
|
||||||
import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler;
|
|
||||||
import eu.crushedpixel.replaymod.recording.ReplayMetaData;
|
import eu.crushedpixel.replaymod.recording.ReplayMetaData;
|
||||||
import eu.crushedpixel.replaymod.registry.KeybindRegistry;
|
import eu.crushedpixel.replaymod.registry.KeybindRegistry;
|
||||||
import eu.crushedpixel.replaymod.registry.ResourceHelper;
|
import eu.crushedpixel.replaymod.registry.ResourceHelper;
|
||||||
@@ -135,7 +134,7 @@ public class GuiUploadFile extends GuiScreen implements ProgressUpdateListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!AuthenticationHandler.isAuthenticated()) {
|
if(!ReplayMod.apiClient.isLoggedIn()) {
|
||||||
mc.displayGuiScreen(new GuiLoginPrompt(parent, this, true).toMinecraft());
|
mc.displayGuiScreen(new GuiLoginPrompt(parent, this, true).toMinecraft());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -320,12 +319,12 @@ public class GuiUploadFile extends GuiScreen implements ProgressUpdateListener {
|
|||||||
FileUtils.copyFile(replayFile, tmp);
|
FileUtils.copyFile(replayFile, tmp);
|
||||||
ReplayFileIO.addFilesToZip(tmp, toAdd);
|
ReplayFileIO.addFilesToZip(tmp, toAdd);
|
||||||
|
|
||||||
uploader.uploadFile(GuiUploadFile.this, AuthenticationHandler.getKey(), name, tags, tmp, category, desc);
|
uploader.uploadFile(GuiUploadFile.this, name, tags, tmp, category, desc);
|
||||||
|
|
||||||
FileUtils.deleteQuietly(tmpMeta);
|
FileUtils.deleteQuietly(tmpMeta);
|
||||||
FileUtils.deleteQuietly(tmp);
|
FileUtils.deleteQuietly(tmp);
|
||||||
} else {
|
} else {
|
||||||
uploader.uploadFile(GuiUploadFile.this, AuthenticationHandler.getKey(), name, tags, replayFile, category, desc);
|
uploader.uploadFile(GuiUploadFile.this, name, tags, replayFile, category, desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReplayMod.uploadedFileHandler.markAsUploaded(replayFile);
|
ReplayMod.uploadedFileHandler.markAsUploaded(replayFile);
|
||||||
|
|||||||
@@ -1,102 +0,0 @@
|
|||||||
package eu.crushedpixel.replaymod.online.authentication;
|
|
||||||
|
|
||||||
import com.mojang.authlib.exceptions.AuthenticationException;
|
|
||||||
import eu.crushedpixel.replaymod.ReplayMod;
|
|
||||||
import eu.crushedpixel.replaymod.api.ApiClient;
|
|
||||||
import eu.crushedpixel.replaymod.api.ApiException;
|
|
||||||
import eu.crushedpixel.replaymod.api.replay.holders.AuthConfirmation;
|
|
||||||
import eu.crushedpixel.replaymod.api.replay.holders.AuthKey;
|
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraftforge.common.config.Property;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class AuthenticationHandler {
|
|
||||||
|
|
||||||
public static final int SUCCESS = 1;
|
|
||||||
public static final int INVALID = 2;
|
|
||||||
public static final int NO_CONNECTION = 3;
|
|
||||||
|
|
||||||
private static final ApiClient apiClient = new ApiClient();
|
|
||||||
|
|
||||||
private static String authkey = null;
|
|
||||||
private static String username = null;
|
|
||||||
|
|
||||||
public static boolean isAuthenticated() {
|
|
||||||
return authkey != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getKey() {
|
|
||||||
return authkey;
|
|
||||||
}
|
|
||||||
public static String getUsername() { return username; }
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public static boolean hasDonated(String uuid) throws IOException, ApiException {
|
|
||||||
return apiClient.hasDonated(uuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Minecraft mc = Minecraft.getMinecraft();
|
|
||||||
|
|
||||||
public static void register(String usrname, String mail, String password)
|
|
||||||
throws IOException, ApiException, AuthenticationException {
|
|
||||||
AuthKey auth = apiClient.register(usrname, mail, password,
|
|
||||||
mc.getSession().getProfile().getId().toString());
|
|
||||||
username = usrname;
|
|
||||||
authkey = auth.getAuth();
|
|
||||||
saveAuthkey(authkey);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void loadAuthkeyFromConfig() {
|
|
||||||
Property p = ReplayMod.config.get("authkey", "authkey", "null");
|
|
||||||
|
|
||||||
String key = null;
|
|
||||||
if(!(p.getString().equals("null"))) {
|
|
||||||
key = p.getString();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(key != null) {
|
|
||||||
AuthConfirmation conf = apiClient.checkAuthkey(key);
|
|
||||||
if(conf != null) {
|
|
||||||
authkey = key;
|
|
||||||
username = conf.getUsername();
|
|
||||||
} else {
|
|
||||||
saveAuthkey("null");
|
|
||||||
username = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int authenticate(String usrname, String password) {
|
|
||||||
try {
|
|
||||||
authkey = ReplayMod.apiClient.getLogin(usrname, password).getAuth();
|
|
||||||
username = usrname;
|
|
||||||
saveAuthkey(authkey);
|
|
||||||
return SUCCESS;
|
|
||||||
} catch(ApiException e) {
|
|
||||||
return INVALID;
|
|
||||||
} catch(Exception e) {
|
|
||||||
return NO_CONNECTION;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int logout() {
|
|
||||||
try {
|
|
||||||
ReplayMod.apiClient.logout(authkey);
|
|
||||||
authkey = null;
|
|
||||||
username = null;
|
|
||||||
saveAuthkey("null");
|
|
||||||
return SUCCESS;
|
|
||||||
} catch(ApiException e) {
|
|
||||||
return INVALID;
|
|
||||||
} catch(Exception e) {
|
|
||||||
return NO_CONNECTION;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void saveAuthkey(String authkey) {
|
|
||||||
ReplayMod.config.removeCategory(ReplayMod.config.getCategory("authkey"));
|
|
||||||
ReplayMod.config.get("authkey", "authkey", authkey);
|
|
||||||
ReplayMod.config.save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package eu.crushedpixel.replaymod.online.authentication;
|
||||||
|
|
||||||
|
import eu.crushedpixel.replaymod.api.ApiClient;
|
||||||
|
import eu.crushedpixel.replaymod.api.AuthData;
|
||||||
|
import eu.crushedpixel.replaymod.api.replay.holders.AuthConfirmation;
|
||||||
|
import net.minecraftforge.common.config.Configuration;
|
||||||
|
import net.minecraftforge.common.config.Property;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auth data stored in a {@link Configuration}.
|
||||||
|
*/
|
||||||
|
public class ConfigurationAuthData implements AuthData {
|
||||||
|
|
||||||
|
private final Configuration config;
|
||||||
|
private String userName;
|
||||||
|
private String authKey;
|
||||||
|
|
||||||
|
public ConfigurationAuthData(Configuration config) {
|
||||||
|
this.config = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the data from the configuration and checks for its validity.
|
||||||
|
* If the data is invalid, it is removed from the config.
|
||||||
|
* @param apiClient Api client used for validating the auth data
|
||||||
|
*/
|
||||||
|
public void load(ApiClient apiClient) {
|
||||||
|
Property property = config.get("authkey", "authkey", (String) null);
|
||||||
|
if (property != null) {
|
||||||
|
String authKey = property.getString();
|
||||||
|
AuthConfirmation result = apiClient.checkAuthkey(authKey);
|
||||||
|
if (result != null) {
|
||||||
|
this.authKey = authKey;
|
||||||
|
this.userName = result.getUsername();
|
||||||
|
} else {
|
||||||
|
setData(null, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUserName() {
|
||||||
|
return userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAuthKey() {
|
||||||
|
return authKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setData(String userName, String authKey) {
|
||||||
|
this.userName = userName;
|
||||||
|
this.authKey = authKey;
|
||||||
|
|
||||||
|
config.removeCategory(config.getCategory("authkey"));
|
||||||
|
if (authKey != null) {
|
||||||
|
// Note: .get() actually creates the entry with the default value if it doesn't exist
|
||||||
|
config.get("authkey", "authkey", authKey);
|
||||||
|
}
|
||||||
|
config.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,6 @@ package eu.crushedpixel.replaymod.registry;
|
|||||||
|
|
||||||
import eu.crushedpixel.replaymod.ReplayMod;
|
import eu.crushedpixel.replaymod.ReplayMod;
|
||||||
import eu.crushedpixel.replaymod.gui.elements.listeners.ProgressUpdateListener;
|
import eu.crushedpixel.replaymod.gui.elements.listeners.ProgressUpdateListener;
|
||||||
import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler;
|
|
||||||
import eu.crushedpixel.replaymod.utils.ReplayFile;
|
import eu.crushedpixel.replaymod.utils.ReplayFile;
|
||||||
import eu.crushedpixel.replaymod.utils.ReplayFileIO;
|
import eu.crushedpixel.replaymod.utils.ReplayFileIO;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
@@ -59,7 +58,7 @@ public class DownloadedFileHandler {
|
|||||||
f = generateFileForID(id);
|
f = generateFileForID(id);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ReplayMod.apiClient.downloadFile(AuthenticationHandler.getKey(), id, f, progressUpdateListener);
|
ReplayMod.apiClient.downloadFile(id, f, progressUpdateListener);
|
||||||
if(f.exists()) {
|
if(f.exists()) {
|
||||||
addToIndex(id);
|
addToIndex(id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package eu.crushedpixel.replaymod.registry;
|
|||||||
import com.google.common.primitives.Ints;
|
import com.google.common.primitives.Ints;
|
||||||
import eu.crushedpixel.replaymod.ReplayMod;
|
import eu.crushedpixel.replaymod.ReplayMod;
|
||||||
import eu.crushedpixel.replaymod.api.ApiException;
|
import eu.crushedpixel.replaymod.api.ApiException;
|
||||||
import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -26,20 +25,20 @@ public class FavoritedFileHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addToFavorites(Integer id) throws IOException, ApiException {
|
public void addToFavorites(Integer id) throws IOException, ApiException {
|
||||||
ReplayMod.apiClient.favFile(AuthenticationHandler.getKey(), id, true);
|
ReplayMod.apiClient.favFile(id, true);
|
||||||
favorited.remove(id);
|
favorited.remove(id);
|
||||||
favorited.add(id);
|
favorited.add(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeFromFavorites(Integer id) throws IOException, ApiException {
|
public void removeFromFavorites(Integer id) throws IOException, ApiException {
|
||||||
ReplayMod.apiClient.favFile(AuthenticationHandler.getKey(), id, false);
|
ReplayMod.apiClient.favFile(id, false);
|
||||||
favorited.remove(id);
|
favorited.remove(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reloadFavorites() {
|
public void reloadFavorites() {
|
||||||
if(AuthenticationHandler.isAuthenticated()) {
|
if(ReplayMod.apiClient.isLoggedIn()) {
|
||||||
try {
|
try {
|
||||||
int[] ids = ReplayMod.apiClient.getFavorites(AuthenticationHandler.getKey());
|
int[] ids = ReplayMod.apiClient.getFavorites();
|
||||||
favorited = new ArrayList<Integer>(Ints.asList(ids));
|
favorited = new ArrayList<Integer>(Ints.asList(ids));
|
||||||
retrieved = true;
|
retrieved = true;
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import eu.crushedpixel.replaymod.ReplayMod;
|
|||||||
import eu.crushedpixel.replaymod.api.ApiException;
|
import eu.crushedpixel.replaymod.api.ApiException;
|
||||||
import eu.crushedpixel.replaymod.api.replay.holders.FileRating;
|
import eu.crushedpixel.replaymod.api.replay.holders.FileRating;
|
||||||
import eu.crushedpixel.replaymod.api.replay.holders.Rating;
|
import eu.crushedpixel.replaymod.api.replay.holders.Rating;
|
||||||
import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -24,7 +23,7 @@ public class RatedFileHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void rateFile(int id, Rating.RatingType type) throws IOException, ApiException {
|
public void rateFile(int id, Rating.RatingType type) throws IOException, ApiException {
|
||||||
ReplayMod.apiClient.rateFile(AuthenticationHandler.getKey(), id, type);
|
ReplayMod.apiClient.rateFile(id, type);
|
||||||
if(type == Rating.RatingType.LIKE || type == Rating.RatingType.DISLIKE) {
|
if(type == Rating.RatingType.LIKE || type == Rating.RatingType.DISLIKE) {
|
||||||
rated.put(id, type == Rating.RatingType.LIKE);
|
rated.put(id, type == Rating.RatingType.LIKE);
|
||||||
} else {
|
} else {
|
||||||
@@ -33,9 +32,9 @@ public class RatedFileHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void reloadRatings() {
|
public void reloadRatings() {
|
||||||
if(AuthenticationHandler.isAuthenticated()) {
|
if(ReplayMod.apiClient.isLoggedIn()) {
|
||||||
try {
|
try {
|
||||||
FileRating[] ratings = ReplayMod.apiClient.getRatedFiles(AuthenticationHandler.getKey());
|
FileRating[] ratings = ReplayMod.apiClient.getRatedFiles();
|
||||||
rated = new HashMap<Integer, Boolean>();
|
rated = new HashMap<Integer, Boolean>();
|
||||||
|
|
||||||
for(FileRating fr : ratings) {
|
for(FileRating fr : ratings) {
|
||||||
|
|||||||
Reference in New Issue
Block a user