Initial Commit
commit
76fc9f7455
|
@ -0,0 +1,4 @@
|
|||
# Used by "mix format"
|
||||
[
|
||||
inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"]
|
||||
]
|
|
@ -0,0 +1,26 @@
|
|||
# The directory Mix will write compiled artifacts to.
|
||||
/_build/
|
||||
|
||||
# If you run "mix test --cover", coverage assets end up here.
|
||||
/cover/
|
||||
|
||||
# The directory Mix downloads your dependencies sources to.
|
||||
/deps/
|
||||
|
||||
# Where third-party dependencies like ExDoc output generated docs.
|
||||
/doc/
|
||||
|
||||
# Ignore .fetch files in case you like to edit your project deps locally.
|
||||
/.fetch
|
||||
|
||||
# If the VM crashes, it generates a dump, let's ignore it too.
|
||||
erl_crash.dump
|
||||
|
||||
# Also ignore archive artifacts (built via "mix archive.build").
|
||||
*.ez
|
||||
|
||||
# Ignore package tarball (built via "mix hex.build").
|
||||
steamwebapi-*.tar
|
||||
|
||||
# ignore secrets
|
||||
/config/*.secret.exs
|
|
@ -0,0 +1,21 @@
|
|||
# Steamwebapi
|
||||
|
||||
**TODO: Add description**
|
||||
|
||||
## Installation
|
||||
|
||||
If [available in Hex](https://hex.pm/docs/publish), the package can be installed
|
||||
by adding `steamwebapi` to your list of dependencies in `mix.exs`:
|
||||
|
||||
```elixir
|
||||
def deps do
|
||||
[
|
||||
{:steamwebapi, "~> 0.1.0"}
|
||||
]
|
||||
end
|
||||
```
|
||||
|
||||
Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
|
||||
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
|
||||
be found at [https://hexdocs.pm/steamwebapi](https://hexdocs.pm/steamwebapi).
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
# 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
|
||||
# third-party users, it should be done in your "mix.exs" file.
|
||||
|
||||
# You can configure your application as:
|
||||
#
|
||||
# config :steamwebapi, key: :value
|
||||
#
|
||||
# and access this configuration in your application as:
|
||||
#
|
||||
# Application.get_env(:steamwebapi, :key)
|
||||
#
|
||||
# You can also configure a third-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"
|
||||
import_config "#{Mix.env()}.secret.exs"
|
|
@ -0,0 +1,2 @@
|
|||
use Mix.Config
|
||||
config :tesla, :adapter, Tesla.Adapter.Hackney
|
|
@ -0,0 +1,2 @@
|
|||
use Mix.Config
|
||||
config :tesla, :adapter, Tesla.Adapter.Hackney
|
|
@ -0,0 +1,2 @@
|
|||
use Mix.Config
|
||||
config :tesla, :adapter, Tesla.Adapter.Mock
|
|
@ -0,0 +1,38 @@
|
|||
defmodule IRemoteStorage do
|
||||
use Tesla
|
||||
|
||||
plug(SteamAPI, "ISteamRemoteStorage")
|
||||
plug(Tesla.Middleware.FormUrlencoded)
|
||||
|
||||
def _helper(c, i) do
|
||||
num = Enum.count(i)
|
||||
|
||||
m =
|
||||
i
|
||||
|> Enum.with_index()
|
||||
|> Enum.map(fn {x, y} ->
|
||||
%{"publishedfileids[#{y}]" => x}
|
||||
end)
|
||||
|> Enum.reduce(fn x, xs ->
|
||||
Map.merge(x, xs)
|
||||
end)
|
||||
|
||||
Map.merge(%{"#{c}count" => num}, m)
|
||||
end
|
||||
|
||||
def collection(collections) do
|
||||
vars = _helper("collection", collections)
|
||||
|
||||
if {:ok, response} = post("GetCollectionDetails/v1", vars) do
|
||||
Jason.decode(response.body)
|
||||
end
|
||||
end
|
||||
|
||||
def item(items) do
|
||||
vars = _helper("item", items)
|
||||
|
||||
if {:ok, response} = post("GetPublishedFileDetails/v1", vars) do
|
||||
Jason.decode(response.body)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,37 @@
|
|||
defmodule SteamAPI do
|
||||
@behaviour Tesla.Middleware
|
||||
# steam API helper, based off baseurl and query
|
||||
|
||||
@impl Tesla.Middleware
|
||||
def call(env, next, interface) do
|
||||
env
|
||||
|> apply_base(interface)
|
||||
|> apply_base("https://api.steampowered.com")
|
||||
|> merge(key: Application.fetch_env!(:steamwebapi, :token))
|
||||
|> Tesla.run(next)
|
||||
end
|
||||
|
||||
defp apply_base(env, base) do
|
||||
if Regex.match?(~r/^https?:\/\//i, env.url) do
|
||||
# skip if url is already with scheme
|
||||
env
|
||||
else
|
||||
%{env | url: join(base, env.url)}
|
||||
end
|
||||
end
|
||||
|
||||
defp merge(env, query) do
|
||||
Map.update!(env, :query, &(&1 ++ query))
|
||||
end
|
||||
|
||||
defp join(base, url) do
|
||||
case {String.last(to_string(base)), url} do
|
||||
{nil, url} -> url
|
||||
{"/", "/" <> rest} -> base <> rest
|
||||
{"/", rest} -> base <> rest
|
||||
{_, ""} -> base
|
||||
{_, "/" <> rest} -> base <> "/" <> rest
|
||||
{_, rest} -> base <> "/" <> rest
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,18 @@
|
|||
defmodule Steamwebapi do
|
||||
@moduledoc """
|
||||
Documentation for Steamwebapi.
|
||||
"""
|
||||
|
||||
@doc """
|
||||
Hello world.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> Steamwebapi.hello()
|
||||
:world
|
||||
|
||||
"""
|
||||
def hello do
|
||||
:world
|
||||
end
|
||||
end
|
|
@ -0,0 +1,29 @@
|
|||
defmodule Steamwebapi.MixProject do
|
||||
use Mix.Project
|
||||
|
||||
def project do
|
||||
[
|
||||
app: :steamwebapi,
|
||||
version: "0.1.0",
|
||||
elixir: "~> 1.8",
|
||||
start_permanent: Mix.env() == :prod,
|
||||
deps: deps()
|
||||
]
|
||||
end
|
||||
|
||||
# Run "mix help compile.app" to learn about applications.
|
||||
def application do
|
||||
[
|
||||
extra_applications: [:logger]
|
||||
]
|
||||
end
|
||||
|
||||
# Run "mix help deps" to learn about dependencies.
|
||||
defp deps do
|
||||
[
|
||||
{:tesla, "~> 1.3.0"},
|
||||
{:hackney, "~> 1.15.2"},
|
||||
{:jason, ">= 1.0.0"}
|
||||
]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,13 @@
|
|||
%{
|
||||
"certifi": {:hex, :certifi, "2.5.1", "867ce347f7c7d78563450a18a6a28a8090331e77fa02380b4a21962a65d36ee5", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm"},
|
||||
"hackney": {:hex, :hackney, "1.15.2", "07e33c794f8f8964ee86cebec1a8ed88db5070e52e904b8f12209773c1036085", [: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.5", [hex: :ssl_verify_fun, 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.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"},
|
||||
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"},
|
||||
"mime": {:hex, :mime, "1.3.1", "30ce04ab3175b6ad0bdce0035cba77bba68b813d523d1aac73d9781b4d193cf8", [:mix], [], "hexpm"},
|
||||
"mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm"},
|
||||
"parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm"},
|
||||
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.5", "6eaf7ad16cb568bb01753dbbd7a95ff8b91c7979482b95f38443fe2c8852a79b", [:make, :mix, :rebar3], [], "hexpm"},
|
||||
"tesla": {:hex, :tesla, "1.3.2", "deb92c5c9ce35e747a395ba413ca78593a4f75bf0e1545630ee2e3d34264021e", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.3", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm"},
|
||||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm"},
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
defmodule SteamwebapiTest do
|
||||
use ExUnit.Case
|
||||
doctest Steamwebapi
|
||||
|
||||
test "greets the world" do
|
||||
assert Steamwebapi.hello() == :world
|
||||
end
|
||||
end
|
|
@ -0,0 +1 @@
|
|||
ExUnit.start()
|
Loading…
Reference in New Issue