mirror of
https://github.com/haiwen/seafile-server.git
synced 2025-08-18 23:08:01 +00:00
parent
c31dcc79ce
commit
53e8bbe5d4
@ -220,7 +220,8 @@ CREATE TABLE IF NOT EXISTS RepoTokenPeerInfo (
|
|||||||
peer_name VARCHAR(255),
|
peer_name VARCHAR(255),
|
||||||
sync_time BIGINT,
|
sync_time BIGINT,
|
||||||
client_ver VARCHAR(20),
|
client_ver VARCHAR(20),
|
||||||
UNIQUE INDEX(token)
|
UNIQUE INDEX(token),
|
||||||
|
INDEX(peer_id)
|
||||||
) ENGINE=INNODB;
|
) ENGINE=INNODB;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS RepoTrash (
|
CREATE TABLE IF NOT EXISTS RepoTrash (
|
||||||
@ -243,6 +244,7 @@ CREATE TABLE IF NOT EXISTS RepoUserToken (
|
|||||||
email VARCHAR(255),
|
email VARCHAR(255),
|
||||||
token CHAR(41),
|
token CHAR(41),
|
||||||
UNIQUE INDEX(repo_id, token),
|
UNIQUE INDEX(repo_id, token),
|
||||||
|
UNIQUE INDEX(token),
|
||||||
INDEX (email)
|
INDEX (email)
|
||||||
) ENGINE=INNODB;
|
) ENGINE=INNODB;
|
||||||
|
|
||||||
|
@ -983,7 +983,7 @@ create_tables_mysql (SeafRepoManager *mgr)
|
|||||||
"repo_id CHAR(37), "
|
"repo_id CHAR(37), "
|
||||||
"email VARCHAR(255), "
|
"email VARCHAR(255), "
|
||||||
"token CHAR(41), "
|
"token CHAR(41), "
|
||||||
"UNIQUE INDEX (repo_id, token), INDEX (email))"
|
"UNIQUE INDEX(repo_id, token), UNIQUE INDEX(token), INDEX (email))"
|
||||||
"ENGINE=INNODB";
|
"ENGINE=INNODB";
|
||||||
if (seaf_db_query (db, sql) < 0)
|
if (seaf_db_query (db, sql) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
@ -995,7 +995,7 @@ create_tables_mysql (SeafRepoManager *mgr)
|
|||||||
"peer_ip VARCHAR(41), "
|
"peer_ip VARCHAR(41), "
|
||||||
"peer_name VARCHAR(255), "
|
"peer_name VARCHAR(255), "
|
||||||
"sync_time BIGINT, "
|
"sync_time BIGINT, "
|
||||||
"client_ver VARCHAR(20), UNIQUE INDEX(token))"
|
"client_ver VARCHAR(20), UNIQUE INDEX(token), INDEX(peer_id))"
|
||||||
"ENGINE=INNODB";
|
"ENGINE=INNODB";
|
||||||
if (seaf_db_query (db, sql) < 0)
|
if (seaf_db_query (db, sql) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
@ -1536,15 +1536,9 @@ seaf_repo_manager_delete_token (SeafRepoManager *mgr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (seaf_db_statement_query (mgr->seaf->db,
|
if (seaf_db_statement_query (mgr->seaf->db,
|
||||||
"DELETE FROM RepoUserToken "
|
"DELETE t.*, i.* FROM RepoUserToken t, "
|
||||||
"WHERE repo_id=? and token=?",
|
"RepoTokenPeerInfo i WHERE t.token=i.token AND "
|
||||||
2, "string", repo_id, "string", token) < 0) {
|
"t.token=?",
|
||||||
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL, "DB error");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (seaf_db_statement_query (mgr->seaf->db,
|
|
||||||
"DELETE FROM RepoTokenPeerInfo WHERE token=?",
|
|
||||||
1, "string", token) < 0) {
|
1, "string", token) < 0) {
|
||||||
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL, "DB error");
|
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL, "DB error");
|
||||||
return -1;
|
return -1;
|
||||||
@ -1716,9 +1710,6 @@ seaf_repo_manager_delete_repo_tokens_by_peer_id (SeafRepoManager *mgr,
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
const char *template;
|
const char *template;
|
||||||
GList *token_list = NULL;
|
GList *token_list = NULL;
|
||||||
GString *token_list_str = g_string_new ("");
|
|
||||||
GString *sql = g_string_new ("");
|
|
||||||
GList *ptr;
|
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
template = "SELECT u.token "
|
template = "SELECT u.token "
|
||||||
@ -1736,35 +1727,17 @@ seaf_repo_manager_delete_repo_tokens_by_peer_id (SeafRepoManager *mgr,
|
|||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
for (ptr = token_list; ptr; ptr = ptr->next) {
|
rc = seaf_db_statement_query (mgr->seaf->db, "DELETE u.*, p.* "
|
||||||
const char *token = (char *)ptr->data;
|
"FROM RepoUserToken u, RepoTokenPeerInfo p "
|
||||||
if (token_list_str->len == 0)
|
"WHERE u.token=p.token AND "
|
||||||
g_string_append_printf (token_list_str, "'%s'", token);
|
"u.email = ? AND p.peer_id = ?",
|
||||||
else
|
2, "string", email, "string", peer_id);
|
||||||
g_string_append_printf (token_list_str, ",'%s'", token);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Note that there is a size limit on sql query. In MySQL it's 1MB by default.
|
|
||||||
* Normally the token_list won't be that long.
|
|
||||||
*/
|
|
||||||
g_string_printf (sql, "DELETE FROM RepoUserToken WHERE token in (%s)",
|
|
||||||
token_list_str->str);
|
|
||||||
rc = seaf_db_statement_query (mgr->seaf->db, sql->str, 0);
|
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_INTERNAL, "DB error");
|
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_INTERNAL, "DB error");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_string_printf (sql, "DELETE FROM RepoTokenPeerInfo WHERE token in (%s)",
|
|
||||||
token_list_str->str);
|
|
||||||
rc = seaf_db_statement_query (mgr->seaf->db, sql->str, 0);
|
|
||||||
if (rc < 0)
|
|
||||||
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_INTERNAL, "DB error");
|
|
||||||
|
|
||||||
out:
|
out:
|
||||||
g_string_free (token_list_str, TRUE);
|
|
||||||
g_string_free (sql, TRUE);
|
|
||||||
|
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
g_list_free_full (token_list, (GDestroyNotify)g_free);
|
g_list_free_full (token_list, (GDestroyNotify)g_free);
|
||||||
@ -1783,9 +1756,6 @@ seaf_repo_manager_delete_repo_tokens_by_email (SeafRepoManager *mgr,
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
const char *template;
|
const char *template;
|
||||||
GList *token_list = NULL;
|
GList *token_list = NULL;
|
||||||
GList *ptr;
|
|
||||||
GString *token_list_str = g_string_new ("");
|
|
||||||
GString *sql = g_string_new ("");
|
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
template = "SELECT u.token "
|
template = "SELECT u.token "
|
||||||
@ -1803,28 +1773,11 @@ seaf_repo_manager_delete_repo_tokens_by_email (SeafRepoManager *mgr,
|
|||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
for (ptr = token_list; ptr; ptr = ptr->next) {
|
rc = seaf_db_statement_query (mgr->seaf->db, "DELETE u.*, p.* "
|
||||||
const char *token = (char *)ptr->data;
|
"FROM RepoUserToken u, RepoTokenPeerInfo p "
|
||||||
if (token_list_str->len == 0)
|
"WHERE u.token=p.token AND "
|
||||||
g_string_append_printf (token_list_str, "'%s'", token);
|
"u.email = ?",
|
||||||
else
|
1, "string", email);
|
||||||
g_string_append_printf (token_list_str, ",'%s'", token);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Note that there is a size limit on sql query. In MySQL it's 1MB by default.
|
|
||||||
* Normally the token_list won't be that long.
|
|
||||||
*/
|
|
||||||
g_string_printf (sql, "DELETE FROM RepoUserToken WHERE token in (%s)",
|
|
||||||
token_list_str->str);
|
|
||||||
rc = seaf_db_statement_query (mgr->seaf->db, sql->str, 0);
|
|
||||||
if (rc < 0) {
|
|
||||||
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_INTERNAL, "DB error");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_string_printf (sql, "DELETE FROM RepoTokenPeerInfo WHERE token in (%s)",
|
|
||||||
token_list_str->str);
|
|
||||||
rc = seaf_db_statement_query (mgr->seaf->db, sql->str, 0);
|
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_INTERNAL, "DB error");
|
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_INTERNAL, "DB error");
|
||||||
goto out;
|
goto out;
|
||||||
@ -1833,8 +1786,6 @@ seaf_repo_manager_delete_repo_tokens_by_email (SeafRepoManager *mgr,
|
|||||||
seaf_http_server_invalidate_tokens (seaf->http_server, token_list);
|
seaf_http_server_invalidate_tokens (seaf->http_server, token_list);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
g_string_free (token_list_str, TRUE);
|
|
||||||
g_string_free (sql, TRUE);
|
|
||||||
g_list_free_full (token_list, (GDestroyNotify)g_free);
|
g_list_free_full (token_list, (GDestroyNotify)g_free);
|
||||||
|
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user