38 lines
1.9 KiB
Elixir
38 lines
1.9 KiB
Elixir
defmodule YandexTranslate.Auth.IAMToken do
|
|
alias YandexTranslate.Auth.JWTTokenConfig
|
|
|
|
def get_auth_value() do
|
|
"Bearer " <> get_iam_token()
|
|
end
|
|
|
|
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)
|
|
end
|
|
|
|
defp get_headers(kid \\ Application.get_env(:yandex_translate, :authorized_key_id)),
|
|
do: %{"kid" => kid}
|
|
|
|
defp get_rsa_key(type, key \\ Application.get_env(:yandex_translate, :private_key))
|
|
|
|
defp get_rsa_key(:private, key), do: fetch_key(key)
|
|
|
|
defp get_rsa_key(:public, key) do
|
|
get_rsa_key(:private, key)
|
|
|> JOSE.JWK.from_pem()
|
|
|> JOSE.JWK.to_public()
|
|
|> JOSE.JWK.to_pem()
|
|
|> elem(1)
|
|
end
|
|
|
|
defp fetch_key("-----BEGIN" <> _ = key_content), do: key_content
|
|
|
|
defp fetch_key(key_file), do: File.read!(key_file) |> fetch_key()
|
|
end
|