lib/beyond_api/resources/users.rb
# frozen_string_literal: true
require "beyond_api/utils"
module BeyondApi
class Users < Base
include BeyondApi::Utils
#
# A +POST+ request is used to add the roles of a user.
#
# @beyond_api.scopes +user:r+, +user:u+
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/ac186856-59c4-4d78-a444-8c47ff623525/roles' -i -X POST \
# -H 'Content-Type: text/uri-list' \
# -H 'Authorization: Bearer <Access token>' \
# -d 'https://api-shop.beyondshop.cloud/api/roles/4553f87f-d232-4bf6-8e15-34c373661e82'
#
# @param user_id [String] the user UUID
# @param body [Hash] the request body
#
# @return true
#
# @example
# session.users.add_roles(user_id, body)
#
def add_roles(user_id, body)
path = "/users/#{user_id}/roles"
response, status = BeyondApi::Request.post(@session,
path,
body)
handle_response(response, status, respond_with_true: true)
end
#
# A +GET+ request is used to list all users visible to the current user. This request will not list the support user.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users' -i -X GET \
# -H 'Content-Type: application/json' \
# -H 'Accept: application/hal+json' \
# -H 'Authorization: Bearer <Access token>'
#
# @beyond_api.scopes +user:r+
#
# @option params [Boolean] :paginated
# @option params [Integer] :size the page size
# @option params [Integer] :page the page number
#
# @return [OpenStruct]
#
# @example
# @users = session.users.all(size: 100, page: 0)
#
def all(params = {})
path = "/users"
handle_all_request(path, :users, params)
end
#
# A +POST+ request is used to change the password of a user.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/e112b1fe-5f67-4e22-a3c7-a1f6d1891b22/change-password' -i -X POST \
# -H 'Content-Type: application/json' \
# -H 'Accept: application/json' \
# -H 'Authorization: Bearer <Access token>' \
# -d '{
# "currentPassword" : "GoodPassword01!;)",
# "newPassword" : "ValidPassword123"
# }'
#
# @beyond_api.scopes ++
#
# @param user_id [String] the user UUID
# @param current_password [String] the current password
# @param new_password [String] the new password
#
# @return [OpenStruct]
#
# @example
# session.users.change_password(user_id, current_password, new_password)
#
def change_password(user_id, current_password, new_password)
path = "/users/#{user_id}/change-password"
response, status = BeyondApi::Request.post(@session,
path,
current_password: current_password,
new_password: new_password)
handle_response(response, status)
end
#
# A +POST+ request is used to change the username of a user.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/ea0ddc0b-e3fb-47c7-9133-e9f5fc0ec442/change-username' -i -X POST \
# -H 'Content-Type: application/json' \
# -H 'Accept: application/json' \
# -H 'Authorization: Bearer <Access token>' \
# -d '{
# "currentPassword" : "GoodPassword01!;)",
# "newUsername" : "new username"
# }'
#
# @param user_id [String] the user UUID
# @param new_username [String] the new username
# @param current_password [String] the current password
#
# @return [OpenStruct]
#
# @example
# session.users.change_username(user_id, new_username, current_password)
#
def change_username(user_id, new_username, current_password)
path = "/users/#{user_id}/change-username"
response, status = BeyondApi::Request.post(@session,
path,
new_username: new_username,
current_password: current_password)
handle_response(response, status)
end
#
# A +POST+ request is used to create a user.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users' -i -X POST \
# -H 'Content-Type: application/json' \
# -H 'Accept: application/json' \
# -H 'Authorization: Bearer <Access token>' \
# -d '{
# "username" : "user",
# "password" : "GoodPassword01!;)",
# "email" : "baxter@example.org"
# }'
#
# @beyond_api.scopes +user:c+
#
# @param body [Hash] the request body
#
# @return [OpenStruct]
#
# @example
# body = {
# "username" => "user",
# "password" => "GoodPassword01!;)",
# "email" => "baxter@example.org"
# }
# @user = session.users.create(body)
#
def create(body)
path = "/users"
response, status = BeyondApi::Request.post(@session,
path,
body)
handle_response(response, status)
end
#
# A +POST+ request is used to enable support access for a shop. If enabled, the customer support will receive specific rights for direct support in the merchant’s cockpit.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/support' -i -X POST \
# -H 'Content-Type: application/json' \
# -H 'Accept: application/json' \
# -H 'Authorization: Bearer <Access token>'
#
# @beyond_api.scopes +user:c+
#
# @return true
#
# @example
# session.users.enable_support_access
#
def enable_support_access
path = "/users/support"
response, status = BeyondApi::Request.post(@session,
path)
handle_response(response, status, respond_with_true: true)
end
#
# A +POST+ request is used to disable support access.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/support' -i -X DELETE \
# -H 'Content-Type: application/json' \
# -H 'Accept: application/json' \
# -H 'Authorization: Bearer <Access token>'
#
# @beyond_api.scopes +user:c+
#
# @return true
#
# @example
# session.users.disable_support_access
#
def disable_support_access
path = "/users/support"
response, status = BeyondApi::Request.delete(@session,
path)
handle_response(response, status, respond_with_true: true)
end
#
# A +GET+ request is used to retrieve the details of a user.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/e4b528ce-bb9e-4cc5-95e1-7dadfa4cf0f3' -i -X GET \
# -H 'Content-Type: application/json' \
# -H 'Accept: application/hal+json' \
# -H 'Authorization: Bearer <Access token>'
#
# @beyond_api.scopes +user:r+
#
# @param user_id [String] the user UUID
#
# @return [OpenStruct]
#
# @example
# @user = session.users.find("e4b528ce-bb9e-4cc5-95e1-7dadfa4cf0f3")
#
def find(user_id)
path = "/users/#{user_id}"
response, status = BeyondApi::Request.get(@session,
path)
handle_response(response, status)
end
#
# A +GET+ request is used to list all roles of a user.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/0d4bd0a5-94dc-498e-b6a6-305c619bb20d/roles' -i -X GET \
# -H 'Authorization: Bearer <Access token>'
#
# @beyond_api.scopes +user:r+
#
# @param user_id [String] the user UUID
#
# @return [OpenStruct]
#
# @example
# @roles = session.users.roles("0d4bd0a5-94dc-498e-b6a6-305c619bb20d")
#
def roles(user_id)
path = "/users/#{user_id}/roles"
response, status = BeyondApi::Request.get(@session,
path)
handle_response(response, status)
end
#
# A +GET+ request is used to find a user by username.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/search/find-by-username?username=username' -i -X GET \
# -H 'Accept: application/hal+json' \
# -H 'Authorization: Bearer <Access token>'
#
# @beyond_api.scopes +user:r+
#
# @param username [String] the user username
#
# @return [OpenStruct]
#
# @example
# @user = session.users.search_by_username(username)
#
def search_by_username(username)
path = "/users/search/find-by-username"
response, status = BeyondApi::Request.get(@session,
path,
username: username)
handle_response(response, status)
end
#
# A +POST+ request is used to trigger an email address change. A confirmation email to change the email address will be sent to the user. The confirmation email will contain a link to the email address change page of the merchant’s cockpit. The link includes a JWT to authorize the email address change.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/8f5fd817-0ea1-4550-b4b9-fc437b1b6905/change-email-request?locale=en-US' -i -X POST \
# -H 'Content-Type: application/json' \
# -H 'Accept: application/json' \
# -H 'Authorization: Bearer <Access token>' \
# -d '{
# "currentPassword" : "GoodPassword01!;)",
# "newEmail" : "newEmail@Gmail.com"
# }'
#
# @beyond_api.scopes ++
#
# @param user_id [String] the user UUID
# @param new_email [String] the new email address
# @param current_password [String] the current password
# @param locale [String] the email locale
#
# @return true
#
# @example
# session.users.send_email_address_change(user_id, new_email, current_password, locale)
#
def send_email_address_change(user_id, new_email, current_password, locale)
path = "/users/#{user_id}/change-email-request"
response, status = BeyondApi::Request.post(@session,
path,
{ new_email: new_email, current_password: current_password },
{ locale: locale })
handle_response(response, status, respond_with_true: true)
end
#
# A +POST+ request is used to trigger a password reset email to be sent to a user. The email will contain a link to the change password settings page of the merchant’s cockpit. The link includes a JWT to authorize the password reset.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/reset-password-request?locale=en-US' -i -X POST \
# -H 'Content-Type: application/json' \
# -H 'Accept: application/json' \
# -d '{
# "email" : "customer@host.tld"
# }'
#
# @beyond_api.scopes ++
#
# @param email [String] the user email
# @param locale [String] the email locale
#
# @return true
#
# @example
# session.users.send_reset_password_email(email, locale)
#
def send_reset_password_email(email, locale)
path = "/users/reset-password-request"
response, status = BeyondApi::Request.post(@session,
path,
{ email: email },
{ locale: locale })
handle_response(response, status, respond_with_true: true)
end
#
# A +PUT+ request is used set the roles of a user.
#
# @beyond_api.scopes +user:u+
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/cfd08a92-dc96-4947-8142-1b6021177f60/roles' -i -X PUT \
# -H 'Content-Type: text/uri-list' \
# -H 'Authorization: Bearer <Access token>' \
# -d 'https://api-shop.beyondshop.cloud/api/roles/165fee2b-f87e-4f33-b036-14b8d96d927a'
#
# @param user_id [String] the user UUID
# @param body [Hash] the request body
#
# @return true
#
# @example
# session.users.set_roles(user_id, body)
#
def set_roles(user_id, body)
path = "/users/#{user_id}/roles"
response, status = BeyondApi::Request.put(@session,
path,
body)
handle_response(response, status, respond_with_true: true)
end
#
# A +GET+ request is used to retrieve the status of the support access for a shop, i.e. if the support user is enabled or disabled for the shop.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/support' -i -X GET \
# -H 'Accept: application/hal+json' \
# -H 'Authorization: Bearer <Access token>'
#
# @beyond_api.scopes +user:r+
#
# @return [OpenStruct]
#
# @example
# session.users.support_access
#
def support_access
path = "/users/support"
response, status = BeyondApi::Request.get(@session,
path)
handle_response(response, status)
end
#
# A +POST+ request is used to verify a password against the password guidelines.
#
# $ curl 'https://api-shop.beyondshop.cloud/api/users/verify-password?userRole=merchant' -i -X POST \
# -H 'Content-Type: application/json' \
# -H 'Accept: application/json' \
# -d '{
# "password" : "ValidPassword!"
# }'
#
# @beyond_api.scopes ++
#
# @param password [String] the password to verify
#
# @return true
#
# @example
# session.users.verify_password(password)
#
def verify_password(password, user_role)
path = "/users/verify-password"
response, status = BeyondApi::Request.post(@session,
path,
password: password,
user_role: user_role)
handle_response(response, status, respond_with_true: true)
end
end
end