Skip to content

me.virmesh.server.switchNewAccount

事前登録済みのポスト量子化移行を確定し、旧アカウントから新アカウントへ参照先を切り替えます。

me.virmesh.server.notifyNewAccount で保存済みの移行予定を確定する private action です。 受信側 PlayerServer は旧アカウントを無効化し、フレンド情報などの参照先を新アカウントへ切り替えます。 top-level の signaturenewSignature で、 両アカウントが切り替え時点の payload に同意していることを確認します。 tombstone 化済み account を含む migration は受理されません。

draft

Endpoint

Method
POST
Path
/private/me.virmesh.server.switchNewAccount
Auth
required
Host
VirMesh.PlayerServer

Request schema

fromstringRequired

移行元アカウントの id です。通常は payload.oldAccountId と同じ値を送ります。

payload.oldAccountIdstringRequired

切り替え対象の移行元アカウント id です。

payload.newAccountIdstringRequired

切り替え先の移行先アカウント id です。

payload.switched_atintegerRequired

切り替えを確定した時刻です。UNIX epoch milliseconds を送ります。

signaturestringRequired

oldAccountId, newAccountId, switched_at から構成される canonical JSON に対する旧アカウント鍵の署名です。

newSignaturestringRequired

oldAccountId, newAccountId, switched_at から構成される canonical JSON に対する新アカウント鍵の署名です。

Request example

{
  "from": "medi:player:ed25519:base64-old-public-key",
  "payload": {
    "oldAccountId": "medi:player:ed25519:base64-old-public-key",
    "newAccountId": "medi:player:sqisign:base64-new-public-key",
    "switched_at": 1770003600000
  },
  "signature": "base64-signature-by-old-account",
  "newSignature": "base64-signature-by-new-account"
}

Responses

200
status+me.virmesh.success.accountSwitched

ポスト量子化移行が確定し、旧アカウントから新アカウントへ切り替わったことを示します。

me.virmesh.server.switchNewAccount が正常終了し、 事前登録済みの移行予定に従って旧アカウントが無効化され、新アカウントが参照先として有効化されたことを示します。

account switched

{
  "status": "status+me.virmesh.success.accountSwitched"
}
400
status+me.virmesh.json.invalid_json

request body が JSON として解釈できないことを示します。

この status は body が壊れている、または JSON parser が受理できない形式で送られた場合に返ります。

Status payload

payload.messagestringRequired

実装依存の詳細メッセージです。

malformed json

{
  "status": "status+me.virmesh.json.invalid_json",
  "payload": {
    "message": "Request body must be valid JSON."
  }
}
400
status+me.virmesh.json.invalid_private_request

private request envelope の形式が不正であることを示します。

この status は private route が期待する from, payload, signature などの envelope 要件を満たさない場合に返ります。

Status payload

payload.messagestringRequired

実装依存の詳細メッセージです。

invalid private envelope

{
  "status": "status+me.virmesh.json.invalid_private_request",
  "payload": {
    "message": "Private request must contain the expected envelope fields."
  }
}
400
status+me.virmesh.json.unexpected_fields

許可されていない field が request に含まれていることを示します。

この status は strict validation が有効な route に未知の top-level field または payload field を送った場合に返ります。

Status payload

payload.messagestringRequired

実装依存の詳細メッセージです。

unexpected request fields

{
  "status": "status+me.virmesh.json.unexpected_fields",
  "payload": {
    "message": "Request contains unknown fields that are not allowed by this route."
  }
}
400
status+me.virmesh.json.invalid_payload

`payload`がactionの期待する形式ではないことを示します。

リクエストデータ自体はJSON objectとして解釈できたものの、 期待する形式と一致しない場合に使います。

Status payload

payload.messagestringRequired

検証に失敗した理由を表す詳細メッセージです。

invalid payload

{
  "status": "status+me.virmesh.json.invalid_payload",
  "payload": {
    "message": "送信されたペイロードが正しい形式ではありません。"
  }
}
401
status+me.virmesh.key.invalid_signature

署名の形式が不正、または署名検証に失敗したことを示します。

この status は署名文字列が base64 として不正な場合と、 復元できた署名が検証に失敗した場合に使われます。

Status payload

payload.messagestringRequired

実装依存の詳細メッセージです。

signature verification failed

{
  "status": "status+me.virmesh.key.invalid_signature",
  "payload": {
    "message": "Signature verification failed."
  }
}
404
status+me.virmesh.server.unknownPreparedMigration

指定した移行元/移行先ペアに対応する事前登録済み migration が見つからないことを示します。

me.virmesh.server.switchNewAccount に対して、 me.virmesh.server.notifyNewAccount で保存された migration record が存在しない場合に返します。

Status payload

payload.messagestringRequired

record を見つけられなかった理由を表す実装依存の詳細メッセージです。

prepared migration not found

{
  "status": "status+me.virmesh.server.unknownPreparedMigration",
  "payload": {
    "message": "No prepared migration exists for the specified account pair."
  }
}
409
status+me.virmesh.server.account_mismatch

移行要求のアカウント情報が署名、公開鍵、または保存済み migration record と一致しないことを示します。

この status は移行要求に含まれるアカウント情報の整合性が取れない場合に返ります。 たとえば newAccountIdnewPublicKey/newKeyType の対応が一致しない場合や、 事前登録済み record と異なるアカウントの組み合わせで切り替えを試みた場合が該当します。

Status payload

payload.messagestringRequired

不一致の内容を表す実装依存の詳細メッセージです。

account pair mismatch

{
  "status": "status+me.virmesh.server.account_mismatch",
  "payload": {
    "message": "The requested account mapping does not match the prepared migration."
  }
}
409
status+me.virmesh.server.migration_already_switched

指定した migration がすでに切り替え済みであることを示します。

me.virmesh.server.switchNewAccount に対して、 同じ移行元/移行先ペアの migration がすでに確定済みである場合に返します。

Status payload

payload.messagestringRequired

重複切り替えであることを表す実装依存の詳細メッセージです。

migration already switched

{
  "status": "status+me.virmesh.server.migration_already_switched",
  "payload": {
    "message": "The specified migration has already been finalized."
  }
}
410
status+me.virmesh.account.disabled

対象 account が tombstone 化済みであり、有効な主体または参照先として扱えないことを示します。

この status は account が disable 済みで、以後の更新、social 操作、migration、 公開 profile / handle 解決の対象として受理されない場合に返ります。 通常は HTTP 410 Gone と組み合わせて返します。

Status payload

payload.messagestringRequired

実装依存の詳細メッセージです。

account disabled

{
  "status": "status+me.virmesh.account.disabled",
  "payload": {
    "message": "The requested account has been disabled and tombstoned."
  }
}
501
status+me.virmesh.action.not_supported

要求した action が現在の server では利用できないことを示します。

指定されたactionがサーバー上で無効化されており、使用できないことを示します。

Status payload

payload.messagestringRequired

実装依存の詳細メッセージです。

action is disabled

{
  "status": "status+me.virmesh.action.not_supported",
  "payload": {
    "message": "registerAccountKeyによる登録がサポートされていません。"
  }
}