diff --git a/backend/app.py b/backend/app.py index 1a77f1a..acf835b 100644 --- a/backend/app.py +++ b/backend/app.py @@ -712,23 +712,32 @@ def newserv_account_lock_acquire(): "lock": lock_row_payload(row), }) - if row["holder_source"] != source: - return jsonify({ - "ok": False, - "message": f"$C6Account is already active\\non {row['holder_source']}.", - "holder_source": row["holder_source"], - "state": row["state"], - "lock": lock_row_payload(row), - }) - sessions = row["sessions"] or {} if isinstance(sessions, str): sessions = json.loads(sessions) + + if row["holder_source"] != source: + target_region_current = False + if row["state"] == "draining" and not sessions and source_region: + _all_current, sync = account_sync_current_on_all_regions(account_id) + region_status = (sync.get("regions") or {}).get(source_region) or {} + target_region_current = region_status.get("status") == "current" + + if not target_region_current: + return jsonify({ + "ok": False, + "message": f"$C6Account is already active\\non {row['holder_source']}.", + "holder_source": row["holder_source"], + "state": row["state"], + "lock": lock_row_payload(row), + }) + sessions[session_nonce] = session_info cur.execute(""" UPDATE account_session_locks - SET state = 'active', + SET holder_source = %s, + state = 'active', source_region = %s, source_ship = %s, account_store = %s, @@ -739,6 +748,7 @@ def newserv_account_lock_acquire(): RETURNING account_id, holder_source, source_region, source_ship, account_store, state, sessions, created_at, updated_at, expires_at """, ( + source, source_region, source_ship, account_store,