diff --git a/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/links/Link.kt b/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/links/Link.kt deleted file mode 100644 index 9adf50614..000000000 --- a/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/links/Link.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2016-2021 Álinson Santos Xavier - * - * This file is part of Loop Habit Tracker. - * - * Loop Habit Tracker is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Loop Habit Tracker is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package org.isoron.uhabits.sync.links - -import org.isoron.uhabits.sync.defaultMapper - -/** - * A Link maps a public URL (such as https://sync.loophabits.org/links/B752A6) - * to a synchronization key. They are used to transfer sync keys between devices - * without ever exposing the original sync key. Unlike sync keys, links expire - * after a few minutes. - */ -data class Link( - val id: String, - val syncKey: String, - val createdAt: Long, -) - -fun Link.toJson(): String = defaultMapper.writeValueAsString(this) diff --git a/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/links/LinkManager.kt b/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/links/LinkManager.kt deleted file mode 100644 index db3daf25f..000000000 --- a/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/links/LinkManager.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2016-2021 Álinson Santos Xavier - * - * This file is part of Loop Habit Tracker. - * - * Loop Habit Tracker is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Loop Habit Tracker is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package org.isoron.uhabits.sync.links - -import org.isoron.uhabits.sync.KeyNotFoundException -import org.isoron.uhabits.sync.utils.randomString - -class LinkManager( - private val timeoutInMillis: Long = 900_000, -) { - private val links = HashMap() - - fun register(syncKey: String): Link { - val link = Link( - id = randomString(64), - syncKey = syncKey, - createdAt = System.currentTimeMillis(), - ) - links[link.id] = link - return link - } - - fun get(id: String): Link { - val link = links[id] ?: throw KeyNotFoundException() - val ageInMillis = System.currentTimeMillis() - link.createdAt - if (ageInMillis > timeoutInMillis) { - links.remove(id) - throw KeyNotFoundException() - } - return link - } -} diff --git a/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/server/AbstractSyncServer.kt b/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/server/AbstractSyncServer.kt index 2c7153f4e..f3afe7bf0 100644 --- a/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/server/AbstractSyncServer.kt +++ b/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/server/AbstractSyncServer.kt @@ -23,7 +23,6 @@ import org.isoron.uhabits.sync.EditConflictException import org.isoron.uhabits.sync.KeyNotFoundException import org.isoron.uhabits.sync.ServiceUnavailable import org.isoron.uhabits.sync.SyncData -import org.isoron.uhabits.sync.links.Link interface AbstractSyncServer { /** @@ -63,22 +62,4 @@ interface AbstractSyncServer { * to insufficient server resources or network problems. */ suspend fun getDataVersion(key: String): Long - - /** - * Registers a new temporary link (mapping to the given sync key) and returns it. - * - * @throws ServiceUnavailable If the link cannot be generated at this time due to - * insufficient server resources. - */ - suspend fun registerLink(syncKey: String): Link - - /** - * Retrieves the syncKey associated with the given link id. - * - * @throws ServiceUnavailable If the link cannot be resolved at this time due to - * insufficient server resources. - * @throws KeyNotFoundException If the link id cannot be found, or if it has - * expired. - */ - suspend fun getLink(id: String): Link } diff --git a/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/server/RepositorySyncServer.kt b/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/server/RepositorySyncServer.kt index 9dbf0cbe3..30f9abbe2 100644 --- a/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/server/RepositorySyncServer.kt +++ b/uhabits-server/src/main/kotlin/org/isoron/uhabits/sync/server/RepositorySyncServer.kt @@ -23,8 +23,6 @@ import io.prometheus.client.Counter import org.isoron.uhabits.sync.EditConflictException import org.isoron.uhabits.sync.KeyNotFoundException import org.isoron.uhabits.sync.SyncData -import org.isoron.uhabits.sync.links.Link -import org.isoron.uhabits.sync.links.LinkManager import org.isoron.uhabits.sync.repository.Repository import org.isoron.uhabits.sync.utils.randomString @@ -33,7 +31,6 @@ import org.isoron.uhabits.sync.utils.randomString */ class RepositorySyncServer( private val repo: Repository, - private val linkManager: LinkManager = LinkManager(), ) : AbstractSyncServer { private val requestsCounter: Counter = Counter.build() @@ -77,16 +74,6 @@ class RepositorySyncServer( return repo.get(key).version } - override suspend fun registerLink(syncKey: String): Link { - requestsCounter.labels("registerLink").inc() - return linkManager.register(syncKey) - } - - override suspend fun getLink(id: String): Link { - requestsCounter.labels("getLink").inc() - return linkManager.get(id) - } - private suspend fun generateKey(): String { while (true) { val key = randomString(64)