2016-11-13 18:21:00 +01:00
|
|
|
package me.impy.aegis.db;
|
|
|
|
|
2017-12-03 18:06:35 +01:00
|
|
|
import org.json.JSONException;
|
2016-11-13 18:21:00 +01:00
|
|
|
import org.json.JSONObject;
|
|
|
|
|
2017-08-26 21:15:53 +02:00
|
|
|
import java.io.Serializable;
|
2018-03-13 18:30:47 +01:00
|
|
|
import java.util.UUID;
|
2016-11-13 18:21:00 +01:00
|
|
|
|
2018-06-07 12:27:42 +02:00
|
|
|
import me.impy.aegis.encoding.Base64;
|
|
|
|
import me.impy.aegis.encoding.Base64Exception;
|
2018-06-06 16:15:31 +02:00
|
|
|
import me.impy.aegis.otp.OtpInfo;
|
|
|
|
import me.impy.aegis.otp.OtpInfoException;
|
2017-08-26 21:15:53 +02:00
|
|
|
|
|
|
|
public class DatabaseEntry implements Serializable {
|
2018-03-13 18:30:47 +01:00
|
|
|
private UUID _uuid;
|
2017-12-27 21:01:53 +01:00
|
|
|
private String _name = "";
|
2018-06-06 16:15:31 +02:00
|
|
|
private String _issuer = "";
|
|
|
|
private OtpInfo _info;
|
2018-06-07 12:27:42 +02:00
|
|
|
private byte[] _icon;
|
2017-08-26 21:15:53 +02:00
|
|
|
|
2018-06-06 16:15:31 +02:00
|
|
|
public DatabaseEntry(OtpInfo info) {
|
2017-08-26 21:15:53 +02:00
|
|
|
_info = info;
|
2018-03-13 18:30:47 +01:00
|
|
|
_uuid = UUID.randomUUID();
|
2017-08-26 21:15:53 +02:00
|
|
|
}
|
|
|
|
|
2018-06-06 16:15:31 +02:00
|
|
|
public DatabaseEntry(OtpInfo info, String name, String issuer) {
|
|
|
|
this(info);
|
|
|
|
setName(name);
|
|
|
|
setIssuer(issuer);
|
|
|
|
}
|
|
|
|
|
|
|
|
public JSONObject serialize() {
|
2016-11-13 18:21:00 +01:00
|
|
|
JSONObject obj = new JSONObject();
|
2018-06-06 16:15:31 +02:00
|
|
|
|
|
|
|
try {
|
|
|
|
obj.put("type", _info.getType());
|
|
|
|
obj.put("uuid", _uuid.toString());
|
|
|
|
obj.put("name", _name);
|
|
|
|
obj.put("issuer", _issuer);
|
|
|
|
obj.put("info", _info.toJson());
|
2018-06-07 12:27:42 +02:00
|
|
|
obj.put("icon", _icon == null ? JSONObject.NULL : Base64.encode(_icon));
|
2018-06-06 16:15:31 +02:00
|
|
|
} catch (JSONException e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
|
2016-11-13 18:21:00 +01:00
|
|
|
return obj;
|
|
|
|
}
|
|
|
|
|
2018-06-07 12:27:42 +02:00
|
|
|
public void deserialize(JSONObject obj) throws JSONException, OtpInfoException, Base64Exception {
|
2018-03-13 18:30:47 +01:00
|
|
|
// if there is no uuid, generate a new one
|
|
|
|
if (!obj.has("uuid")) {
|
|
|
|
_uuid = UUID.randomUUID();
|
|
|
|
} else {
|
|
|
|
_uuid = UUID.fromString(obj.getString("uuid"));
|
|
|
|
}
|
2017-08-26 21:15:53 +02:00
|
|
|
_name = obj.getString("name");
|
2018-06-06 16:15:31 +02:00
|
|
|
_issuer = obj.getString("issuer");
|
|
|
|
_info = OtpInfo.parseJson(obj.getString("type"), obj.getJSONObject("info"));
|
2018-06-07 12:27:42 +02:00
|
|
|
|
|
|
|
String icon = obj.optString("icon", null);
|
|
|
|
if (icon != null) {
|
|
|
|
_icon = Base64.decode(icon);
|
|
|
|
}
|
2017-08-26 21:15:53 +02:00
|
|
|
}
|
|
|
|
|
2018-03-13 18:30:47 +01:00
|
|
|
public UUID getUUID() {
|
|
|
|
return _uuid;
|
2017-12-27 21:01:53 +01:00
|
|
|
}
|
2018-06-06 16:15:31 +02:00
|
|
|
|
2017-08-26 21:15:53 +02:00
|
|
|
public String getName() {
|
|
|
|
return _name;
|
|
|
|
}
|
2018-06-06 16:15:31 +02:00
|
|
|
|
|
|
|
public String getIssuer() {
|
|
|
|
return _issuer;
|
|
|
|
}
|
|
|
|
|
2018-06-07 12:27:42 +02:00
|
|
|
public byte[] getIcon() {
|
2017-08-26 21:15:53 +02:00
|
|
|
return _icon;
|
|
|
|
}
|
2018-06-06 16:15:31 +02:00
|
|
|
|
|
|
|
public OtpInfo getInfo() {
|
2017-08-26 21:15:53 +02:00
|
|
|
return _info;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setName(String name) {
|
|
|
|
_name = name;
|
|
|
|
}
|
2018-06-06 16:15:31 +02:00
|
|
|
|
|
|
|
public void setIssuer(String issuer) {
|
|
|
|
_issuer = issuer;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setInfo(OtpInfo info) {
|
2017-08-26 21:15:53 +02:00
|
|
|
_info = info;
|
|
|
|
}
|
2018-06-07 12:27:42 +02:00
|
|
|
|
|
|
|
public void setIcon(byte[] icon) {
|
|
|
|
_icon = icon;
|
|
|
|
}
|
2016-11-13 18:21:00 +01:00
|
|
|
}
|