自動生成された研究アーティファクト — 上流プロジェクトではありません。
このリポジトリは、公開されているGitHub Actionsワークフローの脆弱性を再現するための、ラヴァル大学の修士論文向けに自動化ハーネスによって構築された使い捨てラボです。これは
ONSdigital/ras-collection-instrumentのコミット493dc3d7c85f39c44e879941df9d5682865da109(2020-12-03)時点の逐語的なスナップショットであり、そのプロジェクト自身のライセンスの下で再配布されています。そのライセンスファイルはこのスナップショットに変更なしで含まれています。上流プロジェクトは関与しておらず、決して標的にはなりません。ここで研究されている脆弱性はすでに公開されています。このリポジトリ内のすべてのシークレットと変数はランダムに生成されたダミー値であり、実際の認証情報は存在しません。アクション参照とランナーイメージは、2020-12-03時点で解決されたものに固定されています。スナップショットに加えられたすべての変更については、ハーネス出力の
pinning.mdを参照してください。質問や異議がある場合: [email protected]
これはRAS Collection Instrumentマイクロサービスであり、収集演習(collection exercises)と調査票(instruments)のアップロードを担当します。また、収集調査票を.xlsxファイルとしてダウンロードするためにも使用でき、検索フィルターによる収集調査票の検索も可能です。 このサービスには、収集演習と収集調査票をリンクおよびリンク解除する機能があります。演習と調査票の関係は一対多であり、1つの収集演習に複数の収集調査票を関連付けることができます。 JSONスキーマ内の各収集調査票には、サンプル単位参照、タイプ、サマリーIDに加えて、追加の属性があります。 このサービスは主に収集演習サービスと通信し、その他にパーティ(party)、ケース(case)、および調査(survey)サービスとも通信します。 収集調査票に関するログ情報はrabbitmqに送信されます。
収集調査票は、以下のフィールドを持つinstrumentテーブルに格納されます:
type = 収集演習のタイプ(例: SEFT、EQなど) instrument_id = 調査票のUUID stamp = 収集調査票が作成された時刻を示すタイムスタンプ survey_id = 関連する調査のUUID classifiers = 調査の分類子 survey = 調査自体 seft_file = 調査票のseftファイル
3つの異なるエンドポイントビューが存在します: /collectioninstrument(ほとんどのエンドポイントで使用)、および /survey_responses と /info です。
収集演習用に収集調査票がアップロードされると、rm-collection-exerciseサービス用のSeft.Instrumentsキューにメッセージが書き込まれます。 SEFT調査応答がアップロードされると、sdx-seft-consumerサービス用のSeft.Responsesキューにメッセージが書き込まれます。
これにはpipenvのインストールが必要です:
pip install pipenv
テストを実行するには、rabbitmqとデータベースサーバーが必要です。toxスクリプトはこれらの依存関係をDockerコンテナ内で作成して実行し、ユニットテストの実行後に破棄します。
pipenv install --dev
pipenv run tox
必要な依存関係とともにサービスを実行するには:
docker-compose up -d db rabbitmq
pipenv run python run.py
サービスが起動していることをテストするには:
curl http://localhost:8082/info
データベースはアプリケーションの起動時に自動的に作成されます。
サービスをDockerコンテナで実行するために、Composeスクリプトが含まれています:
docker-compose up -d
設定に使用できる環境変数を以下に示します:
| 環境変数 | 説明 | デフォルト |
|---|---|---|
| MAX_UPLOAD_FILE_NAME_LENGTH | ファイル名の最大長 | 50 |
| LOGGING_LEVEL | ロガーのレベル | INFO |
| JSON_SECRET_KEYS | キーのJSON表現 | None |
| ONS_CRYPTOKEY | Cryptographerが使用するキー | None |
| SECURITY_USER_NAME | クライアントが他のAPIと認証するために使用するユーザー名 | admin |
| SECURITY_USER_PASSWORD | クライアントが他のAPIと認証するために使用するパスワード | secret |
| COLLECTION_EXERCISE_SCHEMA | 収集調査票スキーマの場所 | application/schemas/collection_instrument_schema.json |
| CASE_URL | ケースサービスのURL | 'http://localhost:8171' |
| COLLECTION_EXERCISE_URL | 収集演習サービスのURL | 'http://localhost:8145' |
| SURVEY_SERVICE_URL | 調査サービスのURL | 'http://localhost:8080' |
| PARTY_URL | パーティサービスのURL | 'http://localhost:8081' |
| RABBITMQ_AMQP_COLLECTION_INSTRUMENT | rabbitmqのURI | None |
| RABBITMQ_AMQP_SURVEY_RESPONSE | rabbitmqのURI | None |
これらは config.py で設定されています。
/developer_scripts に移動して import.py を実行し、コマンドラインのプロンプトに回答します。
collection_instrument_schema には、formType と formtype という一見同一に見える2つの属性フィールドがあります。entname1/2/3 や runame1/2/3 など、名前と目的が不明瞭です。スキーマは再設計されるか、より具体的なドキュメントを持つべきです。/collectioninstrument/count エンドポイントは、収集調査票の数を返すだけです。なぜサービスがこれを行う必要があるのでしょうか?これはデータベースクエリで実現できないのでしょうか?