From 5f60e7a525dfca55a159c8a055c284473491b37b Mon Sep 17 00:00:00 2001 From: Ryan Winchester Date: Sat, 6 Jan 2024 21:40:20 -0400 Subject: [PATCH] Update deps and docs --- .github/workflows/ci.yml | 29 +++++++++++++++++++++++++++-- README.md | 7 ++++--- config/config.exs | 30 ------------------------------ lib/plug_attack.ex | 2 +- lib/storage/ets.ex | 6 +++--- mix.exs | 8 ++++++-- mix.lock | 22 +++++++++++----------- 7 files changed, 52 insertions(+), 52 deletions(-) delete mode 100644 config/config.exs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5a58f4e..6f48366 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,37 +9,62 @@ on: jobs: mix_test: name: mix test (Elixir ${{matrix.elixir}} | OTP ${{matrix.otp}}) - runs-on: ubuntu-18.04 + runs-on: ${{matrix.os}} strategy: fail-fast: false matrix: include: - elixir: 1.4.x + os: ubuntu-18.04 otp: 18 - elixir: 1.5.x + os: ubuntu-18.04 otp: 18 - elixir: 1.6.x + os: ubuntu-18.04 otp: 19 - elixir: 1.7.x + os: ubuntu-18.04 otp: 19 - elixir: 1.8.x + os: ubuntu-18.04 otp: 20 - elixir: 1.9.x + os: ubuntu-18.04 otp: 20 - elixir: 1.10.x + os: ubuntu-18.04 otp: 21 - elixir: 1.11.x + os: ubuntu-18.04 otp: 22 - elixir: 1.11.x + os: ubuntu-18.04 otp: 23 - elixir: 1.12.x + os: ubuntu-18.04 otp: 24 warnings_as_errors: true static_analysis: true + - elixir: 1.13.x + os: ubuntu-18.04 + otp: 24 + warnings_as_errors: true + static_analysis: true + - elixir: 1.14.x + os: ubuntu-20.04 + otp: 25 + warnings_as_errors: true + static_analysis: true + - elixir: 1.15.x + os: ubuntu-20.04 + otp: 25 + warnings_as_errors: true + static_analysis: true env: MIX_ENV: test steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: erlef/setup-beam@v1 with: otp-version: ${{matrix.otp}} diff --git a/README.md b/README.md index 84d9c29..58f89ae 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,19 @@ # PlugAttack +[![build](https://github.com/michalmuskala/plug_attack/actions/workflows/ci.yml/badge.svg)](https://github.com/michalmuskala/plug_attack/actions/workflows/ci.yml) [![Hex.pm](https://img.shields.io/hexpm/v/plug_attack.svg)](https://hex.pm/packages/plug_attack) [![Docs](http://img.shields.io/badge/hex.pm-docs-green.svg?style=flat)](https://hexdocs.pm/plug_attack/) + + A plug building toolkit for blocking and throttling abusive requests. This is inspired by the Kickstarter's Rack::Attack middleware for Ruby. ## Installation -If [available in Hex](https://hex.pm/docs/publish), the package can be installed as: - 1. Add `plug_attack` to your list of dependencies in `mix.exs`: ```elixir def deps do - [{:plug_attack, "~> 0.4.2"}] + [{:plug_attack, "~> 0.4.3"}] end ``` diff --git a/config/config.exs b/config/config.exs deleted file mode 100644 index 12625f3..0000000 --- a/config/config.exs +++ /dev/null @@ -1,30 +0,0 @@ -# This file is responsible for configuring your application -# and its dependencies with the aid of the Mix.Config module. -use Mix.Config - -# This configuration is loaded before any dependency and is restricted -# to this project. If another project depends on this project, this -# file won't be loaded nor affect the parent project. For this reason, -# if you want to provide default values for your application for -# 3rd-party users, it should be done in your "mix.exs" file. - -# You can configure for your application as: -# -# config :plug_attack, key: :value -# -# And access this configuration in your application as: -# -# Application.get_env(:plug_attack, :key) -# -# Or configure a 3rd-party app: -# -# config :logger, level: :info -# - -# It is also possible to import configuration files, relative to this -# directory. For example, you can emulate configuration per environment -# by uncommenting the line below and defining dev.exs, test.exs and such. -# Configuration from the imported file will override the ones defined -# here (which is why it is important to import them last). -# -# import_config "#{Mix.env}.exs" diff --git a/lib/plug_attack.ex b/lib/plug_attack.ex index 2d8d477..edd222e 100644 --- a/lib/plug_attack.ex +++ b/lib/plug_attack.ex @@ -2,7 +2,7 @@ defmodule PlugAttack do @moduledoc ~S""" A plug building toolkit for blocking and throttling abusive requests. - PlugAttack is a set of macros that can be used to build a plug to protect + `PlugAttack` is a set of macros that can be used to build a plug to protect your web app from bad clients. It allows safelisting, blocklisting and throttling based on arbitrary properties of the request. diff --git a/lib/storage/ets.ex b/lib/storage/ets.ex index fe93ebb..5954d92 100644 --- a/lib/storage/ets.ex +++ b/lib/storage/ets.ex @@ -1,6 +1,6 @@ defmodule PlugAttack.Storage.Ets do @moduledoc """ - Storage solution for PlugAttack using a local ets table. + Storage solution for `PlugAttack` using a local `:ets` table. ## Usage @@ -8,7 +8,7 @@ defmodule PlugAttack.Storage.Ets do children = [ # ... - worker(PlugAttack.Storage.Ets, [MyApp.PlugAttackStorage]) + {PlugAttack.Storage.Ets, name: MyApp.PlugAttackStorage} ] This will later allow you to pass the `:storage` option to various rules @@ -70,7 +70,7 @@ defmodule PlugAttack.Storage.Ets do @doc """ Starts the storage table and cleaner process. - The process is registered under `name` and a public, named ets table + The process is registered under `name` and a public, named `:ets` table with that name is created as well. ## Options diff --git a/mix.exs b/mix.exs index 6e4e742..09a807b 100644 --- a/mix.exs +++ b/mix.exs @@ -1,6 +1,8 @@ defmodule PlugAttack.Mixfile do use Mix.Project + @repository "https://github.com/michalmuskala/plug_attack" + def project do [ app: :plug_attack, @@ -9,6 +11,8 @@ defmodule PlugAttack.Mixfile do build_embedded: Mix.env() == :prod, start_permanent: Mix.env() == :prod, description: description(), + source_url: @repository, + homepage_url: @repository, package: package(), deps: deps() ] @@ -34,8 +38,8 @@ defmodule PlugAttack.Mixfile do defp package do [ - licenses: ["Apache 2.0"], - links: %{"GitHub" => "https://github.com/michalmuskala/plug_attack"} + licenses: ["Apache-2.0"], + links: %{"GitHub" => @repository} ] end end diff --git a/mix.lock b/mix.lock index b617cd6..dd0d7a4 100644 --- a/mix.lock +++ b/mix.lock @@ -1,15 +1,15 @@ %{ - "dialyxir": {:hex, :dialyxir, "1.1.0", "c5aab0d6e71e5522e77beff7ba9e08f8e02bad90dfbeffae60eaf0cb47e29488", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "07ea8e49c45f15264ebe6d5b93799d4dd56a44036cf42d0ad9c960bc266c0b9a"}, + "dialyxir": {:hex, :dialyxir, "1.4.3", "edd0124f358f0b9e95bfe53a9fcf806d615d8f838e2202a9f430d59566b6b53b", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "bf2cfb75cd5c5006bec30141b131663299c661a864ec7fbbc72dfa557487a986"}, "earmark": {:hex, :earmark, "1.3.5", "0db71c8290b5bc81cb0101a2a507a76dca659513984d683119ee722828b424f6", [:mix], [], "hexpm", "762b999fd414fb41e297944228aa1de2cd4a3876a07f968c8b11d1e9a2190d07"}, - "earmark_parser": {:hex, :earmark_parser, "1.4.13", "0c98163e7d04a15feb62000e1a891489feb29f3d10cb57d4f845c405852bbef8", [:mix], [], "hexpm", "d602c26af3a0af43d2f2645613f65841657ad6efc9f0e361c3b6c06b578214ba"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"}, "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, - "ex_doc": {:hex, :ex_doc, "0.25.1", "4b736fa38dc76488a937e5ef2944f5474f3eff921de771b25371345a8dc810bc", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "3200b0a69ddb2028365281fbef3753ea9e728683863d8cdaa96580925c891f67"}, - "makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.15.1", "b5888c880d17d1cc3e598f05cdb5b5a91b7b17ac4eaf5f297cb697663a1094dd", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.1", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "db68c173234b07ab2a07f645a5acdc117b9f99d69ebf521821d89690ae6c6ec8"}, - "makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, - "mime": {:hex, :mime, "1.6.0", "dabde576a497cef4bbdd60aceee8160e02a6c89250d6c0b29e56c0dfb00db3d2", [:mix], [], "hexpm", "31a1a8613f8321143dde1dafc36006a17d28d02bdfecb9e95a880fa7aabd19a7"}, - "nimble_parsec": {:hex, :nimble_parsec, "1.1.0", "3a6fca1550363552e54c216debb6a9e95bd8d32348938e13de5eda962c0d7f89", [:mix], [], "hexpm", "08eb32d66b706e913ff748f11694b17981c0b04a33ef470e33e11b3d3ac8f54b"}, - "plug": {:hex, :plug, "1.8.3", "12d5f9796dc72e8ac9614e94bda5e51c4c028d0d428e9297650d09e15a684478", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "164baaeb382d19beee0ec484492aa82a9c8685770aee33b24ec727a0971b34d0"}, - "plug_crypto": {:hex, :plug_crypto, "1.0.0", "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm", "73c1682f0e414cfb5d9b95c8e8cd6ffcfdae699e3b05e1db744e58b7be857759"}, - "telemetry": {:hex, :telemetry, "1.0.0", "0f453a102cdf13d506b7c0ab158324c337c41f1cc7548f0bc0e130bbf0ae9452", [:rebar3], [], "hexpm", "73bc09fa59b4a0284efb4624335583c528e07ec9ae76aca96ea0673850aec57a"}, + "ex_doc": {:hex, :ex_doc, "0.31.0", "06eb1dfd787445d9cab9a45088405593dd3bb7fe99e097eaa71f37ba80c7a676", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.1", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "5350cafa6b7f77bdd107aa2199fe277acf29d739aba5aee7e865fc680c62a110"}, + "makeup": {:hex, :makeup, "1.1.1", "fa0bc768698053b2b3869fa8a62616501ff9d11a562f3ce39580d60860c3a55e", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "5dc62fbdd0de44de194898b6710692490be74baa02d9d108bc29f007783b0b48"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"}, + "makeup_erlang": {:hex, :makeup_erlang, "0.1.3", "d684f4bac8690e70b06eb52dad65d26de2eefa44cd19d64a8095e1417df7c8fd", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "b78dc853d2e670ff6390b605d807263bf606da3c82be37f9d7f68635bd886fc9"}, + "mime": {:hex, :mime, "2.0.5", "dc34c8efd439abe6ae0343edbb8556f4d63f178594894720607772a041b04b02", [:mix], [], "hexpm", "da0d64a365c45bc9935cc5c8a7fc5e49a0e0f9932a761c55d6c52b142780a05c"}, + "nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"}, + "plug": {:hex, :plug, "1.15.2", "94cf1fa375526f30ff8770837cb804798e0045fd97185f0bb9e5fcd858c792a3", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "02731fa0c2dcb03d8d21a1d941bdbbe99c2946c0db098eee31008e04c6283615"}, + "plug_crypto": {:hex, :plug_crypto, "2.0.0", "77515cc10af06645abbfb5e6ad7a3e9714f805ae118fa1a70205f80d2d70fe73", [:mix], [], "hexpm", "53695bae57cc4e54566d993eb01074e4d894b65a3766f1c43e2c61a1b0f45ea9"}, + "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, }