Django 3.xから4.xへの更新でPOSTリクエスト時にCSRF検証に失敗する

想定: 3.xで動いていたフォーム送信が4.xへの更新でCSRF検証に失敗するために動かなくなった settings.pyにCSRF_TRUSTED_ORIGINSを追加すればよい。 https://docs.djangoproject.com/en/4.0/ref/settings/#std-setting-CSRF_TRUSTED_ORIGINS Origin: e.g. https://example.com https://developer.mozilla.org/ja/docs/Glossary/Origin CSRF検証のドキュメントを3.xと比べると、以下の記述が増えている。 CsrfViewMiddleware verifies the Origin header, if provided by the browser, against the current host and the CSRF_TRUSTED_ORIGINS setting. This provides protection against cross-subdomain attacks. 4.x: https://docs.djangoproject.com/en/4.0/ref/csrf/#how-it-works 3.x: https://docs.djangoproject.com/en/3.2/ref/csrf/#how-it-works

2022年6月24日 · aoirint

ニコニコ生放送のお絵描き放送ネタでペンタブレットを使う

ニコニコ生放送のお絵描き放送ネタで、ペンタブで描こうとしたらページがスクロールしてしまった。 これを防ぎたい。 開発者ツールから以下を実行する。 document.body.style = 'margin: 0; height: 100%; overflow: hidden;' 元に戻すには(bodyタグにstyle属性がない場合)、 document.body.style = ''

2022年6月24日 · aoirint

GitHub ActionsでPyPIにPythonパッケージをpushする(GitHub Release連携でバージョン付け)

https://qiita.com/aoirint/items/09ea153751a65bf4876f#github-release%E4%BD%9C%E6%88%90%E6%99%82%E3%81%ABpypi%E3%81%AB%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89 上の記事のWorkflowテンプレートをちょっと改良した。 GitHub Release作成時にリリースタグをパッケージバージョンにしてpush 構成 mypackage/__init__.pyに以下のように開発用のバージョン情報を記述する。 リリース時にGithub Actionsでリリースタグに置換してからPyPIにpushする。 __VERSION__ = '0.0.0' GitHub Secrets PYPI_API_TOKEN GitHub Workflow .github/workflows/pypi.yml name: Publish a package to PyPI on: release: types: - created env: VERSION: ${{ github.event.release.tag_name != '' && github.event.release.tag_name || '0.0.0' }} jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup Python uses: actions/setup-python@v2 with: python-version: 3.x - name: Install Dependencies run: | pip3 install -r requirements.txt pip3 install wheel - name: Replace version run: | sed -i "s/__VERSION__ = '0.0.0'/__VERSION__ = '${{ env.VERSION }}'/" mypackage/__init__.py - name: Build Package run: python3 setup.py sdist bdist_wheel - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }}

2022年6月24日 · aoirint

GitHub ActionsでDocker RegistryにDockerイメージをpushする(latestタグ、GitHub Release連携でバージョン付け)

https://blog.aoirint.com/entry/2021/github_actions_docker_io_token/ 上の記事のWorkflowテンプレートをちょっと改良した。 Docker Hub以外のDockerレジストリに対応 GitHub Release作成時にリリースタグをイメージタグにしてpush レジストリURL Docker Hub: docker.io GitHub Container Registry: ghcr.io GitLab Container Registry: registry.gitlab.com GitHub Secrets DOCKER_USERNAME DOCKER_TOKEN GitHub Workflow .github/workflows/docker.yml https://github.com/docker/login-action https://github.com/docker/build-push-action name: Push to Docker registry on: push: branches: - main release: types: - created env: IMAGE_NAME: docker.io/username/imagename IMAGE_TAG: ${{ github.event.release.tag_name != '' && github.event.release.tag_name || 'latest' }} jobs: push: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup Docker Buildx id: buildx uses: docker/setup-buildx-action@v2 - name: Login to Docker Registry uses: docker/login-action@v2 with: registry: docker.io username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} - name: Build and Deploy Docker image uses: docker/build-push-action@v3 env: IMAGE_NAME_AND_TAG: ${{ format('{0}:{1}', env.IMAGE_NAME, env.IMAGE_TAG) }} with: context: . builder: ${{ steps.buildx.outputs.name }} file: ./Dockerfile push: true tags: ${{ env.IMAGE_NAME_AND_TAG }} cache-from: type=registry,ref=${{ env.IMAGE_NAME_AND_TAG }}-buildcache cache-to: type=registry,ref=${{ env.IMAGE_NAME_AND_TAG }}-buildcache,mode=max

2022年6月24日 · aoirint

pip-compileでMetadataGenerationFailedの例外が起きる

pip-compileは、pip-toolsパッケージ(jazzband/pip-tools)に含まれるコマンドで、 Pythonパッケージのリストrequirements.inから、 依存ツリーのライブラリバージョンリストrequirements.txtを出力してくれる便利なツールである。 入力例 requirements.in django requests gunicorn mysqlclient python-dateutil requests-oauthlib schedule pip-compile requirements.in 出力例 requirements.txt # # This file is autogenerated by pip-compile with python 3.8 # To update, run: # # pip-compile requirements.in # asgiref==3.5.2 # via django backports-zoneinfo==0.2.1 # via django certifi==2022.6.15 # via requests charset-normalizer==2.0.12 # via requests django==4.0.5 # via -r requirements.in gunicorn==20.1.0 # via -r requirements.in idna==3.3 # via requests mysqlclient==2.1.1 # via -r requirements.in oauthlib==3.2.0 # via requests-oauthlib python-dateutil==2.8.2 # via -r requirements.in requests==2.28.0 # via # -r requirements.in # requests-oauthlib requests-oauthlib==1.3.1 # via -r requirements.in schedule==1.1.0 # via -r requirements.in six==1.16.0 # via python-dateutil sqlparse==0.4.2 # via django urllib3==1.26.9 # via requests # The following packages are considered to be unsafe in a requirements file: # setuptools https://pypi.org/project/pip-tools/ (現在 pip-tools==6.6.2) https://github.com/jazzband/pip-tools ところでPythonパッケージは、システムパッケージの事前インストールを要求することがある。 以下、システムパッケージ名はDebian/Ubuntuを想定する。 ...

2022年6月24日 · aoirint

Among Us Modding

modding公式ポリシー: https://www.innersloth.com/among-us-mod-policy/ ReactorのDiscordに解析に使えるDLL(Assembly-CSharp.dll)が投下されている(実装入り) https://qiita.com/Koke1024/items/b22eb842b01399f5694f https://github.com/NuclearPowered/Reactor 実装が不要でインタフェースだけの確認の場合、Il2CppDumperにGameAssembly.dllとglobal-metadata.datをかませて、実装が含まれないAssembly-CSharp.dllを吐き出させることができるので、自前で確認できる(公式アプデ後最速で確認するのに有用) https://github.com/Perfare/Il2CppDumper DLLのデコンパイルには、Assembly-CSharp.dllをdnSpyやILSpyに読ませるとよい https://github.com/dnSpy/dnSpy https://github.com/icsharpcode/ILSpy 処理をインジェクションするためのフレームワーク https://github.com/BepInEx/BepInEx

2022年6月22日 · aoirint

Let's Encrypt Failure Rate Limit

設定に自信がないときは、Rate limitが緩いLet’s EncryptのStaging環境で試してから本番環境でやり直す Staging環境を使うには、certbotのオプションに --test-cert をつける 本番環境の場合、1時間内に5回失敗すると一時的に弾かれるようになる(too many failed authorizations recently) Staging環境の場合、1時間内に60回失敗まで緩められている 本番環境 https://letsencrypt.org/docs/rate-limits/ Staging環境 https://letsencrypt.org/docs/staging-environment/

2022年6月16日 · aoirint

PGP

https://qiita.com/umi/items/2074aac509a6e78c4ef4 https://gnupg.org/download/ Windowsバイナリ https://gpg4win.org/get-gpg4win.html https://keybase.io/aoirint フィンガープリント: EFA9 05B1 BAB7 B91E DFF0 5A3F 9404 6621 FF11 BC4B 有効期限: 2024-06-11 公開鍵 -----BEGIN PGP PUBLIC KEY BLOCK----- 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 CF2HZCE7if9HHxNo12HF21ncFQ== =Wkdz -----END PGP PUBLIC KEY BLOCK-----

2022年6月13日 · aoirint

効果音素材

無料効果音で遊ぼう!(小森平): https://taira-komori.jpn.org/freesound.html DOVA-SYNDROME: https://dova-s.jp/se/ ぷー!: https://dova-s.jp/se/play1226.html 効果音ラボ: https://soundeffect-lab.info/ 声素材: https://soundeffect-lab.info/sound/voice/game.html

2022年6月10日 · aoirint

Use MinIO with AWS CLI

AWS S3互換を意識して、設定にあたってMinIOに依存しすぎないようにしたい (それはそれとしてMinIO ClientはAWS S3互換クライアントとして便利らしい) https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html aws-cli version: 2.7.7 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install https://awscli.amazonaws.com/v2/documentation/api/latest/reference/index.html --endpoint-urlで操作対象をAWS S3からMinIOに変更できる https://awscli.amazonaws.com/v2/documentation/api/latest/topic/config-vars.html AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS以外の認証情報を~/.aws/credentialsに保持するのもいまいちな感があるので、環境変数に設定することにする (AWSのIAM?がどうなってるのかよくわからんけど、本来マニュアルオペレーションするときはAWSのアカウントで認証するのかな?) https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-services-s3-commands.html まずは特権アクセスでBucketを作る MinIOのrootユーザのユーザ名・パスワードを設定する(MINIO_ROOT_USER、MINIO_ROOT_PASSWORD) export AWS_ACCESS_KEY_ID=minioadmin export AWS_SECRET_ACCESS_KEY=minioadmin Bucket一覧 aws --endpoint-url http://127.0.0.1:9000 s3 ls Bucket作成(create-bucketも大して変わらんと思うので、あえて高レベルAPIのs3 mbを使わなくていい気もするけどまあいいでしょう) aws --endpoint-url http://127.0.0.1:9000 s3 mb s3://mybucket アクセス制御(Policy)周りはS3と一部互換性がない Policyの構文自体はほぼ同じに作られているけれど、仕様が違うように思われる(AWS S3の仕様をよく知らんけど) https://github.com/minio/minio/issues/9530#issuecomment-625883667 Bucket policyはパブリックアクセスのルール、User/ServiceAccount Policyは認証付きルールと使い分ければいいと思われる Bucket policyはAWS S3互換APIから設定できる User/ServiceAccount PolicyはAWS互換APIから設定できないのでWeb UIまたはMinIO Clientから設定する Bucket policy: allow anonymous user (public) to read mybucket/* { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::mybucket/*" ] } ] } PrincipalはMinIO上のBucketとしては意味がないと思うが、Web Consoleでいじると必要だといわれるので付けておく ...

2022年6月10日 · aoirint