Aegis/app/src/main/java/me/impy/aegis/db/DatabaseEntry.java

129 lines
3.1 KiB
Java
Raw Normal View History

package me.impy.aegis.db;
import org.json.JSONException;
import org.json.JSONObject;
2017-08-26 21:15:53 +02:00
import java.io.Serializable;
import java.util.Arrays;
import java.util.UUID;
import me.impy.aegis.encoding.Base64;
import me.impy.aegis.encoding.Base64Exception;
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 {
private UUID _uuid;
2017-12-27 21:01:53 +01:00
private String _name = "";
private String _issuer = "";
private OtpInfo _info;
private byte[] _icon;
2017-08-26 21:15:53 +02:00
public DatabaseEntry(OtpInfo info) {
2017-08-26 21:15:53 +02:00
_info = info;
_uuid = UUID.randomUUID();
2017-08-26 21:15:53 +02:00
}
public DatabaseEntry(OtpInfo info, String name, String issuer) {
this(info);
setName(name);
setIssuer(issuer);
}
public JSONObject serialize() {
JSONObject obj = new JSONObject();
try {
obj.put("type", _info.getType());
obj.put("uuid", _uuid.toString());
obj.put("name", _name);
obj.put("issuer", _issuer);
obj.put("icon", _icon == null ? JSONObject.NULL : Base64.encode(_icon));
obj.put("info", _info.toJson());
} catch (JSONException e) {
throw new RuntimeException(e);
}
return obj;
}
public void deserialize(JSONObject obj) throws JSONException, OtpInfoException, Base64Exception {
// 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");
_issuer = obj.getString("issuer");
Object icon = obj.get("icon");
if (icon != JSONObject.NULL) {
_icon = Base64.decode((String) icon);
}
_info = OtpInfo.parseJson(obj.getString("type"), obj.getJSONObject("info"));
2017-08-26 21:15:53 +02:00
}
public void resetUUID() {
_uuid = UUID.randomUUID();
}
public UUID getUUID() {
return _uuid;
2017-12-27 21:01:53 +01:00
}
2017-08-26 21:15:53 +02:00
public String getName() {
return _name;
}
public String getIssuer() {
return _issuer;
}
public byte[] getIcon() {
2017-08-26 21:15:53 +02:00
return _icon;
}
public OtpInfo getInfo() {
2017-08-26 21:15:53 +02:00
return _info;
}
public void setName(String name) {
_name = name;
}
public void setIssuer(String issuer) {
_issuer = issuer;
}
public void setInfo(OtpInfo info) {
2017-08-26 21:15:53 +02:00
_info = info;
}
public void setIcon(byte[] icon) {
_icon = icon;
}
public boolean hasIcon() {
return _icon != null;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof DatabaseEntry)) {
return false;
}
DatabaseEntry entry = (DatabaseEntry) o;
return getUUID().equals(entry.getUUID())
&& getName().equals(entry.getName())
&& getIssuer().equals(entry.getIssuer())
&& getInfo().equals(entry.getInfo())
&& Arrays.equals(getIcon(), entry.getIcon());
}
}