163 lines
3.4 KiB
Java
163 lines
3.4 KiB
Java
package xyz.thastertyn.Login;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.BufferedWriter;
|
|
import java.io.File;
|
|
import java.io.FileReader;
|
|
import java.io.FileWriter;
|
|
import java.io.IOException;
|
|
|
|
import xyz.thastertyn.Types.Credentials;
|
|
|
|
public class LocalCredentials {
|
|
|
|
private static LocalCredentials localCredentials = new LocalCredentials();
|
|
|
|
private String path;
|
|
|
|
private File credentialsFile;
|
|
private File credentialsPath;
|
|
|
|
/**
|
|
* Checks for already saved credentials, at least if its file exists <br>
|
|
* for Windows it checks {@code AppData\Roaming\jecnak\credemtials.txt} <br>
|
|
* for Linux it checks {@code ~/.local/share/jecnak/credentials.txt} <br>
|
|
* @return
|
|
* <ul>
|
|
* <li> {@code true} a file exists </li>
|
|
* <li> {@code false} doesn't exist </li>
|
|
* </ul>
|
|
*/
|
|
public boolean checkForExistingCredentials()
|
|
{
|
|
if(System.getProperty("os.name").equals("Linux"))
|
|
{
|
|
// /home/user/.local/share/jecnak/...
|
|
path = System.getProperty("user.home") + "/.local/share/jecnak/";
|
|
}else if(System.getProperty("os.name").contains("Windows"))
|
|
{
|
|
// C:\Users\\user\AppData\Roaming\...
|
|
path = System.getenv("APPDATA") + "\\jecnak\\";
|
|
}else{
|
|
return false;
|
|
}
|
|
|
|
credentialsPath = new File(path);
|
|
credentialsFile = new File(credentialsPath, "credentials.txt");
|
|
|
|
if(!credentialsFile.exists())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Try reading the credentails from a local file
|
|
* @return String[] with username on index 0, and password on index 1, <br>
|
|
* can also return null if credentials are corrupted, inaccessible, etc.
|
|
*/
|
|
public Credentials getCredentialsFile()
|
|
{
|
|
// TODO Use hashmap instead of array
|
|
String user = null;
|
|
String pass = null;
|
|
|
|
if(credentialsFile == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
BufferedReader reader = new BufferedReader(new FileReader(credentialsFile));
|
|
|
|
String line = "";
|
|
while((line = reader.readLine()) != null)
|
|
{
|
|
String[] currentValue = line.split("=");
|
|
|
|
if(currentValue[0].equals("user"))
|
|
{
|
|
user = currentValue[1];
|
|
}else if(currentValue[0].equals("pass"))
|
|
{
|
|
pass = currentValue[1];
|
|
}
|
|
}
|
|
|
|
reader.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
|
|
if(user == null || pass == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return new Credentials(user, pass);
|
|
}
|
|
|
|
/**
|
|
* appends the current credentials to the file
|
|
* @param credentials the array containing username and password. Username is on index 0, password on index 1
|
|
* @return
|
|
*/
|
|
public boolean saveCredentials(Credentials credentials)
|
|
{
|
|
if(credentialsFile == null)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if(!credentialsFile.exists())
|
|
{
|
|
try{
|
|
credentialsPath.mkdirs();
|
|
credentialsFile.createNewFile();
|
|
}catch(IOException e)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
try {
|
|
BufferedWriter writer = new BufferedWriter(new FileWriter(credentialsFile));
|
|
writer.append(String.format(
|
|
"user=%s\npass=%s\n",
|
|
credentials.getUsername(),
|
|
credentials.getPassword()));
|
|
|
|
writer.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Deletes the credentials file
|
|
* @return
|
|
*/
|
|
public boolean deleteCredentials()
|
|
{
|
|
credentialsFile.delete();
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Returns a single instance to prevent creating and loading the files all over again when not much has changed
|
|
* @return {@link LocalCredentials} instance
|
|
*/
|
|
public static LocalCredentials getInstance()
|
|
{
|
|
return localCredentials;
|
|
}
|
|
|
|
}
|
|
|