FiveM SDK 3.2.0

FiveM / RedM から EdgeWorks を使うためのリソースです。EdgeVault・EdgeStream・EdgeGuard が 1 つの edgeworks リソースに入っています。

入手

edgeworks-fivem-sdk-3.2.0.zip·24 ファイル·91 KB

3.2.0 を取得

展開すると edgeworks/ フォルダが出ます。 それを FiveM サーバーの resources/ に置き、server.cfg ensure edgeworks を書きます。 手順は下に続きます。

SHA-256: 1cb662406763b18d4987da1a5b0d39468deacfdc48cd11e8bc9562197753ca5d

2.0.0 を使っているサーバーは更新してください

理由は 2 つあります。ひとつは送り先が変わること。旧サブドメインは移行から 1 か月で止まり、止まったあと 2.0.0 はすべての要求が失敗します。 もうひとつは、2.0.0 に権限の穴が 4 件あったことです。下に全部書いています。

穴を塞げるのは SDK 側だけです。API キーはサーバー単位で、プレイヤー単位ではないので、 こちら(サーバー側)で持ち主を判定することはできません。

送り先

https://edgeworks.nozawatec.com/api
https://nozawatec.com/api/edgeworks

末尾に / を付けないでください。付けると //vault/files になります。

入れ替えの手順

  1. 1

    リソースを差し替える

    edgeworks フォルダをまるごと新しいものに置き換えます。上書きではなく置き換えてください(外したファイルが残ると古い挙動が混ざります)。

  2. 2

    config を 2 枚に分ける

    設定が config.lua(プレイヤーにも配られる)と config_server.lua(サーバーだけ)に分かれました。API キーと送り先とサーバー名は config_server.lua に移してください。古い config.lua だけを置いたままでも起動はしますが、コンソールに赤字で案内が出ます。

  3. 3

    refresh してから ensure edgeworks

    サーバーのコンソールで refresh、続けて ensure edgeworks を実行します。

  4. 4

    サーバーを完全に再起動する

    NUI とクライアントスクリプトが差し替わるので、restart では足りません。スマートフォン系リソース(lb-phone / Quasar Phone など)を併用している場合は、それらも再読み込みしてください。

設定

編集してよいのは config.lua config_server.lua locales/ の 3 つです。 ほかのファイルは更新のたび上書きされます。

config.lua に API キーを書かないでください。このファイルは接続した全プレイヤーの端末へ配られるので、書いた値は誰でも読めます。 送り先・API キー・サーバー名・監視用リソースの名前は config_server.lua に書きます。

config.lua — プレイヤーの端末にも配られます
-- config.lua(プレイヤーの端末にも配られます)
Config.Modules = {
    Vault  = true,   -- EdgeVault(スクリーンショットの保管と閲覧)
    Stream = true,   -- EdgeStream(映像の配信)
    Guard  = true,   -- EdgeGuard(不正の検知)
}

Config.MenuCommand = 'edgeworks'   -- /edgeworks で開く
Config.MenuKey     = 'F10'
Config.Locale      = 'ja'          -- 'ja' / 'en'(文言は locales/ にあります)
Config.DebugLevel  = 0             -- 公開サーバーは 0 のまま
config_server.lua — サーバーだけが読みます
-- config_server.lua(サーバーだけが読みます)
Config.ApiBaseUrl = 'https://nozawatec.com/api/edgeworks'
Config.ApiKey     = 'YOUR_API_KEY_HERE'

-- 1 台につき 1 つ。同じ名前の 2 台を動かすと記録が互いに上書きされます
Config.ServerName = 'My FiveM Server'

Config.Vault = {
    -- プレイヤーごとにフォルダを分ける(既定 true)
    -- false にすると、全員が互いの画像を見られる状態になります
    PerPlayerFolders = true,
    DefaultFolder    = '/screenshots',
    EvidenceFolder   = '/guard-evidence',
}
2.0.0 からの変更点
Config.ApiBaseUrl
https://nozawatec.com/api/edgeworks に変更
Config.Vault.PerPlayerFolders
追加(既定 true)。穴を塞ぐための要
Config.Vault.EvidenceFolder
追加(既定 /guard-evidence)
Config.Vault.PresignedUrlExpiry
削除。送っても API 側が見ていませんでした(常に 1 時間)
Config.Vault.GalleryAutoRefresh
削除。どこからも読まれていませんでした
Config.Stream.NotifyViewers
削除。同上

表から消えた設定は、書いても動作に影響しないことが分かったものです。config から削除してください。

3.0.0 で塞いだ穴

2.0.0 をお使いのサーバーは、下の 4 件の影響を受けます。3.2.0 へ更新すると解消します。

任意のプレイヤーが任意のファイルを消せた

2.0.0 の server/vault.lua は、クライアントから来た file_id を無検査で API へ転送していました。FiveM のサーバーイベントは誰でも好きな引数で呼べるので、連番で叩けばアカウント内の全ファイルを消せました。

全員が全員のスクリーンショットを見られた

SDK は絞り込みのつもりで player_id を送っていましたが、受け側がその値を見ていませんでした。結果として誰でもアカウント内の全ファイルを一覧できました。

任意のプレイヤーが任意の配信を消せた

EdgeStream の delete も同じ形でした。stream_id を無検査で転送していました。

検知ルールを誰でも読めた

EdgeGuard の requestRules だけ管理者の確認が抜けていました。しきい値が読めれば、その下をくぐる設定が読めます。

どう塞いだか

アップロード先をプレイヤーごとのフォルダに分けました。一覧はそのプレイヤーのフォルダだけを引き、 削除は「そのファイルが自分のフォルダに在るか」をサーバーが確かめてから行います。edgeworks.adminを持つ相手は従来どおり全部見られ、消せます。 フォルダは実体のないラベルなので、置き場のディレクトリ構成は変わりません。

2.0.0 で撮ったファイルは /screenshots の直下に在り、新しい版はプレイヤーごとの子フォルダしか引かないので、 旧ファイルは管理者だけが見える状態になります。 各プレイヤーに戻したい場合はダッシュボードから移動させてください。

導入後に確かめてください

この版は構文・設定・イベント・権限の自動検査を通しています。 ゲームサーバー上での通し確認はこれからなので、導入後に次の 2 点をご確認ください。合わない場合はお問い合わせください。

  • ・2 人以上で参加し、ギャラリーに自分のスクリーンショットだけが並ぶこと
  • ・サーバーのコンソールに前提を申告しましたの行が出ること

使うときの注意

  • フォルダはプレイヤーの識別子から作ります。GetPlayerIdentifierが同じ値を返す 2 人は同じフォルダを共有します。標準のlicense:識別子なら一意ですが、フレームワークの設定によって変わります。 導入時に、フォルダが想定どおり分かれているか確かめてください。
  • PerPlayerFolders = falseにすると 2.0.0 と同じ状態に戻ります。共有アルバムを作りたいなど、 意図がある場合だけにしてください。
FiveM SDK | EdgeWorks