diff options
author | Hadrien <26697460+ketsapiwiq@users.noreply.github.com> | 2020-11-11 16:42:35 +0100 |
---|---|---|
committer | Pierre de Lacroix <pierre@pdelacroix.com> | 2021-03-03 18:12:18 +0100 |
commit | b86e9271f1aec757b29a064fa25cd612b6c1d2b4 (patch) | |
tree | ac7aecd606f138171c2c6bddba0c6c8198fc6f63 /lib | |
parent | temporarily fix create_room typespec (diff) |
add post register endpoint + tests
Diffstat (limited to 'lib')
-rw-r--r-- | lib/polyjuice/client/endpoint/post_register.ex | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/lib/polyjuice/client/endpoint/post_register.ex b/lib/polyjuice/client/endpoint/post_register.ex new file mode 100644 index 0000000..df10a8c --- /dev/null +++ b/lib/polyjuice/client/endpoint/post_register.ex @@ -0,0 +1,101 @@ +# Copyright 2019 Hubert Chathi <hubert@uhoreg.ca> +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +defmodule Polyjuice.Client.Endpoint.PostRegister do + @moduledoc """ + Register a user + + https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-register + """ + + @type t :: %__MODULE__{ + kind: :guest | :user, + auth: %{type: String.t(), session: String.t() | nil}, + username: String.t() | nil, + password: String.t() | nil, + device_id: String.t() | nil, + initial_device_display_name: String.t() | nil, + inhibit_login: boolean() + } + + @enforce_keys [:auth] + defstruct [ + :kind, + :auth, + :username, + :password, + :device_id, + :initial_device_display_name, + :inhibit_login + ] + + defimpl Polyjuice.Client.Endpoint.Proto do + def http_spec(%Polyjuice.Client.Endpoint.PostRegister{ + kind: kind, + auth: auth, + username: username, + password: password, + device_id: device_id, + initial_device_display_name: initial_device_display_name, + inhibit_login: inhibit_login + }) do + body = + [ + if(auth != nil, do: [{"auth", auth}], else: []), + if(username != nil, do: [{"username", username}], else: []), + if(password != nil, do: [{"password", password}], else: []), + if(device_id != nil, do: [{"device_id", device_id}], else: []), + if(inhibit_login != nil, + do: [{"inhibit_login", Atom.to_string(inhibit_login)}], + else: [] + ), + if(initial_device_display_name != nil, + do: [{"initial_device_display_name", initial_device_display_name}], + else: [] + ) + ] + |> Enum.concat() + |> Map.new() + |> Jason.encode_to_iodata!() + + query = [ + kind: + if kind == nil do + "user" + else + Atom.to_string(kind) + end + ] + + Polyjuice.Client.Endpoint.HttpSpec.post( + :r0, + "register", + body: body, + query: query, + auth_required: false + ) + end + + def transform_http_result(req, status_code, resp_headers, body) do + Polyjuice.Client.Endpoint.parse_response(req, status_code, resp_headers, body) + end + end + + # defimpl Polyjuice.Client.Endpoint.BodyParser do + # def parse(_req, parsed) do + # {:ok, Map.get(parsed, "user_id"), Map.get(parsed, "access_token"), + # Map.get(parsed, "device_id")} + # end + # end +end |