Current section
Files
Jump to
Current section
Files
lib/upload.ex
defmodule CIPHER.UP do
require Record
require N2O
def cancel(doc), do: spawn(fn -> :n2o_pi.stop(:cipher, doc) end)
def start(login, pass, from, to, doc, _cnt) do
spawn(fn ->
case :n2o_pi.start(
N2O.pi(
module: __MODULE__,
table: :cipher,
sup: CIPHER,
state: {login, pass, from, to, doc, {0, 0, 0}},
name: doc)) do
{:error, x} -> CIPHER.error 'CIPHER ERROR: ~p', [x]
x -> CIPHER.warning 'CIPHER: ~p', [x]
end
end)
end
def proc(:init, N2O.pi(state: {login, pass, from, to, doc, mode}) = pi) do
{:ok, file} = :file.read_file(doc)
url = 'https://ccs-dev-api.cipher.kiev.ua/ccs/auth-2/token'
body = :jsone.encode([grant_type: "password", username: login, client_id: "arch-client", password: pass])
len = :io_lib.format('~p',[:erlang.size(body)])
file_len = :io_lib.format('~p',[:erlang.size(file)])
headers = [{'Content-Type','application/json'},{'Content-Length', len}]
{:ok,{status,headers,body}} = :httpc.request(:post, {url, headers, 'application/json', body}, [{:timeout,10000}], [{:body_format,:binary}])
res = :jsone.decode body
bearer = :maps.get "token_type", res
token = :maps.get "access_token", res
tok = bearer <> " " <> token |> :erlang.binary_to_list
url = 'https://archive-api.cipher.com.ua/arch/api/v1/object/1'
headers = [{'Authorization',tok},{'Content-Type','application/octet-stream'},{'Content-Length', file_len}]
{:ok,{status,headers,body}} = :httpc.request(:post, {url, headers, 'application/octet-stream', file}, [{:timeout,100000}], [{:body_format,:binary}])
CIPHER.debug 'STATUS: ~p~n', [status]
cancel(doc)
{:ok, N2O.pi(pi, state: {login, token, from, to, doc, mode})}
end
def proc({:upload, messageSize, pos, count, sessionId, rest} = m,
N2O.pi(state: {login, pass, _, _, msg_id, _}) = pi) do
{:noreply, pi}
end
def proc(any) do
end
end