FiveM SDK 3.2.0
FiveM / RedM から EdgeWorks を使うためのリソースです。EdgeVault・EdgeStream・EdgeGuard が 1 つの edgeworks リソースに入っています。
入手
edgeworks-fivem-sdk-3.2.0.zip·24 ファイル·91 KB
展開すると 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
リソースを差し替える
edgeworks フォルダをまるごと新しいものに置き換えます。上書きではなく置き換えてください(外したファイルが残ると古い挙動が混ざります)。
- 2
config を 2 枚に分ける
設定が config.lua(プレイヤーにも配られる)と config_server.lua(サーバーだけ)に分かれました。API キーと送り先とサーバー名は config_server.lua に移してください。古い config.lua だけを置いたままでも起動はしますが、コンソールに赤字で案内が出ます。
- 3
refresh してから ensure edgeworks
サーバーのコンソールで refresh、続けて ensure edgeworks を実行します。
- 4
サーバーを完全に再起動する
NUI とクライアントスクリプトが差し替わるので、restart では足りません。スマートフォン系リソース(lb-phone / Quasar Phone など)を併用している場合は、それらも再読み込みしてください。
設定
編集してよいのは config.lua と config_server.lua と locales/ の 3 つです。 ほかのファイルは更新のたび上書きされます。
config.lua に API キーを書かないでください。このファイルは接続した全プレイヤーの端末へ配られるので、書いた値は誰でも読めます。 送り先・API キー・サーバー名・監視用リソースの名前は config_server.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.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',
}- 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 と同じ状態に戻ります。共有アルバムを作りたいなど、 意図がある場合だけにしてください。