2019-02-07 22:39:33 +01:00
|
|
|
package com.beemdevelopment.aegis.db;
|
|
|
|
|
|
|
|
import com.beemdevelopment.aegis.encoding.Base64Exception;
|
|
|
|
import com.beemdevelopment.aegis.otp.OtpInfoException;
|
2016-08-22 19:31:03 +02:00
|
|
|
|
2016-11-13 18:21:00 +01:00
|
|
|
import org.json.JSONArray;
|
2018-03-19 18:00:53 +01:00
|
|
|
import org.json.JSONException;
|
2016-11-13 18:21:00 +01:00
|
|
|
import org.json.JSONObject;
|
2016-08-22 19:31:03 +02:00
|
|
|
|
|
|
|
import java.util.List;
|
2018-09-22 14:12:42 +02:00
|
|
|
import java.util.UUID;
|
2016-08-22 19:31:03 +02:00
|
|
|
|
|
|
|
public class Database {
|
2017-08-26 21:15:53 +02:00
|
|
|
private static final int VERSION = 1;
|
2018-06-06 16:15:31 +02:00
|
|
|
private DatabaseEntryList _entries = new DatabaseEntryList();
|
2016-11-13 18:21:00 +01:00
|
|
|
|
2018-10-06 22:23:38 +02:00
|
|
|
public JSONObject toJson() {
|
2018-03-19 18:00:53 +01:00
|
|
|
try {
|
|
|
|
JSONArray array = new JSONArray();
|
|
|
|
for (DatabaseEntry e : _entries) {
|
2018-10-06 22:23:38 +02:00
|
|
|
array.put(e.toJson());
|
2018-03-19 18:00:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
JSONObject obj = new JSONObject();
|
|
|
|
obj.put("version", VERSION);
|
|
|
|
obj.put("entries", array);
|
|
|
|
return obj;
|
|
|
|
} catch (JSONException e) {
|
2018-06-06 16:15:31 +02:00
|
|
|
throw new RuntimeException(e);
|
2016-11-13 18:21:00 +01:00
|
|
|
}
|
2016-08-22 19:31:03 +02:00
|
|
|
}
|
|
|
|
|
2018-10-06 22:23:38 +02:00
|
|
|
public static Database fromJson(JSONObject obj) throws DatabaseException {
|
|
|
|
Database db = new Database();
|
|
|
|
|
2018-03-19 18:00:53 +01:00
|
|
|
try {
|
|
|
|
int ver = obj.getInt("version");
|
|
|
|
if (ver != VERSION) {
|
|
|
|
throw new DatabaseException("Unsupported version");
|
|
|
|
}
|
|
|
|
|
|
|
|
JSONArray array = obj.getJSONArray("entries");
|
|
|
|
for (int i = 0; i < array.length(); i++) {
|
2018-10-06 22:23:38 +02:00
|
|
|
DatabaseEntry entry = DatabaseEntry.fromJson(array.getJSONObject(i));
|
|
|
|
db.addEntry(entry);
|
2018-03-19 18:00:53 +01:00
|
|
|
}
|
2018-06-07 12:27:42 +02:00
|
|
|
} catch (Base64Exception | OtpInfoException | JSONException e) {
|
2018-03-19 18:00:53 +01:00
|
|
|
throw new DatabaseException(e);
|
2016-11-13 18:21:00 +01:00
|
|
|
}
|
2018-10-06 22:23:38 +02:00
|
|
|
|
|
|
|
return db;
|
2016-08-22 19:31:03 +02:00
|
|
|
}
|
|
|
|
|
2018-06-06 16:15:31 +02:00
|
|
|
public void addEntry(DatabaseEntry entry) {
|
2017-08-26 21:15:53 +02:00
|
|
|
_entries.add(entry);
|
2016-08-22 19:31:03 +02:00
|
|
|
}
|
|
|
|
|
2018-06-06 16:15:31 +02:00
|
|
|
public void removeEntry(DatabaseEntry entry) {
|
2017-08-26 21:15:53 +02:00
|
|
|
_entries.remove(entry);
|
2016-08-22 19:31:03 +02:00
|
|
|
}
|
|
|
|
|
2018-06-06 16:15:31 +02:00
|
|
|
public void replaceEntry(DatabaseEntry newEntry) {
|
|
|
|
_entries.replace(newEntry);
|
2017-12-27 22:04:22 +01:00
|
|
|
}
|
|
|
|
|
2018-06-06 16:15:31 +02:00
|
|
|
public void swapEntries(DatabaseEntry entry1, DatabaseEntry entry2) {
|
|
|
|
_entries.swap(entry1, entry2);
|
2017-12-12 01:50:00 +01:00
|
|
|
}
|
|
|
|
|
2018-06-06 16:15:31 +02:00
|
|
|
public List<DatabaseEntry> getEntries() {
|
|
|
|
return _entries.getList();
|
2018-01-02 14:36:56 +01:00
|
|
|
}
|
2018-09-22 14:12:42 +02:00
|
|
|
|
|
|
|
public DatabaseEntry getEntryByUUID(UUID uuid) {
|
|
|
|
return _entries.getByUUID(uuid);
|
|
|
|
}
|
2017-05-03 21:08:38 +02:00
|
|
|
}
|