From 62c62f01df02f3899aaf20d4bac2fa311e812f3e Mon Sep 17 00:00:00 2001 From: Danylo Negriienko Date: Tue, 16 Jun 2020 20:20:49 +0300 Subject: [PATCH] Mint version updated --- lib/yandex_translate/auth/iam_token.ex | 17 ++++++++++---- lib/yandex_translate/auth/jwt_token_config.ex | 15 ------------- lib/yandex_translate/auth/signer_config.ex | 22 +++++++++++++++++++ mix.exs | 9 ++++---- mix.lock | 6 ++--- 5 files changed, 43 insertions(+), 26 deletions(-) delete mode 100644 lib/yandex_translate/auth/jwt_token_config.ex create mode 100644 lib/yandex_translate/auth/signer_config.ex diff --git a/lib/yandex_translate/auth/iam_token.ex b/lib/yandex_translate/auth/iam_token.ex index 4dfb99d..8cb6a90 100644 --- a/lib/yandex_translate/auth/iam_token.ex +++ b/lib/yandex_translate/auth/iam_token.ex @@ -1,5 +1,5 @@ defmodule YandexTranslate.Auth.IAMToken do - alias YandexTranslate.Auth.JWTTokenConfig + alias YandexTranslate.Auth.SignerConfig def get_auth_value() do "Bearer " <> get_iam_token() @@ -8,12 +8,19 @@ defmodule YandexTranslate.Auth.IAMToken do def get_iam_token() do # Rewrite needed, signing process not worked. Fucking PS256 and hash length optoins on my opinion # Pluged by old IAMToken - "CggVAgAAABoBMRKABDnO1uw1a7U-AIlRglhz8yQVQzXaKjXt1saXk5VDXHH41mlPpMpK3V9-GUgthtdposNYva9hj0DaaHE1YDZfBcZkiZU7T_45ilhFtouG5rARRP8E6GqR4-dMutrYo69XQ3Uj4-KPa0IkOa2HrCTJEePhDHGlz-iW_YnN0QXFIlKN7NMIrZQyYRJ1dvQExx29TARcy_OVWOO8234rU_Vi5BRBKXTfp7NFB589bMe6UhEoYTF-1PdOEtxDJ2DLMdqMiYw4BZnyhOwn81u8kAetHpC-R6kizR8P2omcMyZORk4zwMfgdWlDzAhrIGq4ev8aOpcQH2vH8xh8ZMTgqbRZ9rezOflEZ3bDdDVdcQWjMq4ZYABY1n278pzhucbiTZJl6uxxTXg9Ucbg7_9mpA8DOIBn72wx8dTmrJgXWTstSJ6aShpg_1VJE48gUSenO1AjXWnat9hcvhgrBGKdQFlmhqnrRTptnvhgdNctwvD_tjpjC9ZWa5pBPyE9pKdiZzYUkhSEKEpRKFAh7oGv4i0w5gCHDzQrQfrrMFxFUUPJCg8Hx0tUbLqMgF9sYXYS4vhJFWFtBl_x0dd3KMPy33Fg4oDxlbZwsolyrVI9QnT9Es2qXGp1Sw9TLMM3pAI8G8JOD7O8eTRCJalRrrFOgybbK8LjK7AKLBhI0MNtQs0A_QS-GnYKIGIxODQ5YTljMmQ4ZjRiNjQ5YTU1MzhhN2E1OTdkNDU3ELTgzugFGPSx0egFIj4KFGFqZTB1czQyMWdoNG9idmJwcW5iEg5leGNoYW5nZXJzNGRldioUYjFnbmw5N3VkNzltYXA3bmhnM2wwAjAFOAFQAVoA" end def get_jwt_token() do signer = Joken.Signer.create("PS256", %{"pem" => get_rsa_key(:private)}, get_headers()) - JWTTokenConfig.generate_and_sign(%{}, signer) |> elem(1) + {:ok, token, _payload} = SignerConfig.generate_and_sign(%{}, signer) + token + + # {:ok, payload_map} = SignerConfig.generate_claims() + # {:ok, payload} = Jason.encode(payload_map) + # headers = Map.merge(get_headers(), %{"alg" => "PS256", "typ" => "JWT"}) + # key = get_rsa_key(:private) |> JOSE.JWK.from_pem() + # {_alg, jwt} = JOSE.JWS.sign(key, payload, headers) |> JOSE.JWS.compact() + # jwt end defp get_headers(kid \\ Application.get_env(:yandex_translate, :authorized_key_id)), @@ -31,7 +38,9 @@ defmodule YandexTranslate.Auth.IAMToken do |> elem(1) end - defp fetch_key("-----BEGIN" <> _ = key_content), do: key_content + defp fetch_key("-----BEGIN" <> _ = key_content) do + key_content + end defp fetch_key(key_file), do: File.read!(key_file) |> fetch_key() end diff --git a/lib/yandex_translate/auth/jwt_token_config.ex b/lib/yandex_translate/auth/jwt_token_config.ex deleted file mode 100644 index 7504518..0000000 --- a/lib/yandex_translate/auth/jwt_token_config.ex +++ /dev/null @@ -1,15 +0,0 @@ -defmodule YandexTranslate.Auth.JWTTokenConfig do - @iam_token_url "https://iam.api.cloud.yandex.net/iam/v1/tokens" - - use Joken.Config - - @impl Joken.Config - def token_config() do - default_claims( - iss: Application.get_env(:yandex_translate, :service_account_id), - default_exp: 60 * 60, - skip: [:jti, :nbf], - aud: Application.get_env(:yandex_translate, :iam_token_url) || @iam_token_url - ) - end -end diff --git a/lib/yandex_translate/auth/signer_config.ex b/lib/yandex_translate/auth/signer_config.ex new file mode 100644 index 0000000..32f622d --- /dev/null +++ b/lib/yandex_translate/auth/signer_config.ex @@ -0,0 +1,22 @@ +defmodule YandexTranslate.Auth.SignerConfig do + @iam_token_url "https://iam.api.cloud.yandex.net/iam/v1/tokens" + + use Joken.Config + + # defp iss, do: Application.get_env(:yandex_translate, :service_account_id) + # defp aud, do: Application.get_env(:yandex_translate, :iam_token_url) || @iam_token_url + + @impl Joken.Config + def token_config() do + default_claims( + iss: Application.get_env(:yandex_translate, :service_account_id), + default_exp: 59 * 60, + skip: [:jti, :nbf], + aud: Application.get_env(:yandex_translate, :iam_token_url) || @iam_token_url + ) + + # default_claims(skip: [:aud, :iss, :jti, :nbf]) + # |> add_claim("aud", nil, &(&1 == iss())) + # |> add_claim("iss", nil, &(&1 == aud())) + end +end diff --git a/mix.exs b/mix.exs index e6be4d7..d6562f3 100755 --- a/mix.exs +++ b/mix.exs @@ -2,7 +2,7 @@ defmodule YandexTranslate.MixProject do use Mix.Project @name "YandexTranslate" - @version "0.4.0" + @version "0.4.1" # @repo_url "https://github.com/negrienko/yandex_translate" @repo_url "https://gl.negrienko.com/negrienko/yandex_translate" @homepage_url "https://negrienko.com/all/yandex-translate/" @@ -44,9 +44,10 @@ defmodule YandexTranslate.MixProject do defp deps do [ {:joken, "~> 2.2.0"}, - {:jason, "~> 1.2.0"}, - {:mint, "~> 1.0.0"}, - {:castore, "~> 0.1.5"}, + {:jose, "~> 1.10.1"}, + {:jason, "~> 1.2.1"}, + {:mint, "~> 1.1.0"}, + {:castore, "~> 0.1.6"}, {:ex_spec, "~> 2.0.1", only: :test}, {:ex_doc, "~> 0.21.3", only: :dev}, {:remix, "~> 0.0.2", only: :dev} diff --git a/mix.lock b/mix.lock index 292963c..64c25f0 100644 --- a/mix.lock +++ b/mix.lock @@ -1,6 +1,6 @@ %{ "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm"}, - "castore": {:hex, :castore, "0.1.5", "591c763a637af2cc468a72f006878584bc6c306f8d111ef8ba1d4c10e0684010", [:mix], [], "hexpm", "6db356b2bc6cc22561e051ff545c20ad064af57647e436650aa24d7d06cd941a"}, + "castore": {:hex, :castore, "0.1.6", "2da0dccb3eacb67841d11790598ff03cd5caee861e01fad61dce1376b5da28e6", [:mix], [], "hexpm", "f874c510b720d31dd6334e9ae5c859a06a3c9e67dfe1a195c512e57588556d3f"}, "certifi": {:hex, :certifi, "2.5.1", "867ce347f7c7d78563450a18a6a28a8090331e77fa02380b4a21962a65d36ee5", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm"}, "earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"}, "ex_doc": {:hex, :ex_doc, "0.21.3", "857ec876b35a587c5d9148a2512e952e24c24345552259464b98bfbb883c7b42", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "0db1ee8d1547ab4877c5b5dffc6604ef9454e189928d5ba8967d4a58a801f161"}, @@ -8,14 +8,14 @@ "hackney": {:hex, :hackney, "1.15.1", "9f8f471c844b8ce395f7b6d8398139e26ddca9ebc171a8b91342ee15a19963f4", [:rebar3], [{:certifi, "2.5.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.4", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"}, "httpoison": {:hex, :httpoison, "1.5.1", "0f55b5b673b03c5c327dac7015a67cb571b99b631acc0bc1b0b98dcd6b9f2104", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"}, "idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"}, - "jason": {:hex, :jason, "1.2.0", "10043418c42d2493d0ee212d3fddd25d7ffe484380afad769a0a38795938e448", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "116747dbe057794c3a3e4e143b7c8390b29f634e16c78a7f59ba75bfa6852e7f"}, + "jason": {:hex, :jason, "1.2.1", "12b22825e22f468c02eb3e4b9985f3d0cb8dc40b9bd704730efa11abd2708c44", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b659b8571deedf60f79c5a608e15414085fa141344e2716fbd6988a084b5f993"}, "joken": {:hex, :joken, "2.2.0", "2daa1b12be05184aff7b5ace1d43ca1f81345962285fff3f88db74927c954d3a", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "b4f92e30388206f869dd25d1af628a1d99d7586e5cf0672f64d4df84c4d2f5e9"}, "jose": {:hex, :jose, "1.10.1", "16d8e460dae7203c6d1efa3f277e25b5af8b659febfc2f2eb4bacf87f128b80a", [:mix, :rebar3], [], "hexpm", "3c7ddc8a9394b92891db7c2771da94bf819834a1a4c92e30857b7d582e2f8257"}, "makeup": {:hex, :makeup, "1.0.1", "82f332e461dc6c79dbd82fbe2a9c10d48ed07146f0a478286e590c83c52010b5", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "49736fe5b66a08d8575bf5321d716bac5da20c8e6b97714fec2bcd6febcfa1f8"}, "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm"}, - "mint": {:hex, :mint, "1.0.0", "ca5ab33497ba2bdcc42f6cdd3927420a6159116be87c8173658e93c8746703da", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "b8943ef1e630879538dd6620bfc189d4d75fab3ad39f3fe9c50539879f7efd84"}, + "mint": {:hex, :mint, "1.1.0", "1fd0189edd9e3ffdbd7fcd8bc3835902b987a63ec6c4fd1aa8c2a56e2165f252", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5bfd316c3789340b682d5679a8116bcf2112e332447bdc20c1d62909ee45f48d"}, "mojito": {:hex, :mojito, "0.3.0", "806cd3c1832333a9ee784e7ea2799863fbe4de55ecb4623a8f4ef870c2844cc6", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: false]}, {:mint, "~> 0.2.1", [hex: :mint, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}], "hexpm"}, "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"}, "ojson": {:hex, :ojson, "1.0.0", "fd28614eadaec00a15cdb2f53f29d8717a812a508ddb80d202f2f2e2aaeabbcc", [:mix, :rebar3], [], "hexpm"},