open-keychain/OpenKeychain/src/main/sqldelight/org/sufficientlysecure/keychain/AutocryptPeers.sq
2018-07-19 10:37:09 +02:00

64 lines
2.6 KiB
Plaintext

import java.util.Date;
import org.sufficientlysecure.keychain.model.AutocryptPeer.GossipOrigin;
CREATE TABLE IF NOT EXISTS autocrypt_peers (
package_name TEXT NOT NULL,
identifier TEXT NOT NULL,
last_seen INTEGER AS Date NULL,
last_seen_key INTEGER AS Date NULL,
is_mutual INTEGER AS Boolean NOT NULL DEFAULT 0,
master_key_id INTEGER NULL,
gossip_master_key_id INTEGER NULL,
gossip_last_seen_key INTEGER AS Date NULL,
gossip_origin INTEGER AS GossipOrigin NULL,
PRIMARY KEY(package_name, identifier),
FOREIGN KEY(package_name) REFERENCES api_apps (package_name) ON DELETE CASCADE
);
selectByIdentifiers:
SELECT *
FROM autocrypt_peers
WHERE package_name = ? AND identifier IN ?;
selectByMasterKeyId:
SELECT *
FROM autocrypt_peers
WHERE master_key_id = ?;
selectMasterKeyIdByIdentifier:
SELECT master_key_id
FROM autocrypt_peers
WHERE identifier = ?;
deleteByIdentifier:
DELETE FROM autocrypt_peers
WHERE package_name = ? AND identifier = ?;
deleteByMasterKeyId:
DELETE FROM autocrypt_peers
WHERE master_key_id = ?;
updateLastSeen:
UPDATE autocrypt_peers SET last_seen = ?3 WHERE package_name = ?1 AND identifier = ?2;
updateKey:
UPDATE autocrypt_peers SET last_seen_key = ?3, master_key_id = ?4, is_mutual = ?5 WHERE package_name = ?1 AND identifier = ?2;
updateGossipKey:
UPDATE autocrypt_peers SET gossip_last_seen_key = ?3, gossip_master_key_id = ?4, gossip_origin = ?5 WHERE package_name = ?1 AND identifier = ?2;
insertPeer:
INSERT OR IGNORE INTO autocrypt_peers (package_name, identifier) VALUES (?, ?);
selectAutocryptKeyStatus:
SELECT autocryptPeer.*,
(CASE WHEN ac_key.expiry IS NULL THEN 0 WHEN ac_key.expiry > strftime('%s', 'now') THEN 0 ELSE 1 END) AS key_is_expired_int,
(CASE WHEN gossip_key.expiry IS NULL THEN 0 WHEN gossip_key.expiry > strftime('%s', 'now') THEN 0 ELSE 1 END) AS gossip_key_is_expired_int,
ac_key.is_revoked AS key_is_revoked_int,
gossip_key.is_revoked AS gossip_key_is_revoked_int,
EXISTS (SELECT * FROM certs WHERE certs.master_key_id = autocryptPeer.master_key_id AND verified = 1 ) AS key_is_verified_int,
EXISTS (SELECT * FROM certs WHERE certs.master_key_id = autocryptPeer.gossip_master_key_id AND verified = 1 ) AS gossip_key_is_verified_int
FROM autocrypt_peers AS autocryptPeer
LEFT JOIN keys AS ac_key ON (ac_key.master_key_id = autocryptPeer.master_key_id AND ac_key.rank = 0)
LEFT JOIN keys AS gossip_key ON (gossip_key.master_key_id = gossip_master_key_id AND gossip_key.rank = 0)
WHERE package_name = ?1 AND identifier IN ?2;