lib/stytch/b2b_organizations.rb



# frozen_string_literal: true

require_relative 'request_helper'

module StytchB2B
  class Organizations
    include Stytch::RequestHelper
    attr_reader :members

    def initialize(connection)
      @connection = connection

      @members = StytchB2B::Organizations::Members.new(@connection)
    end

    def create(
      organization_name:,
      organization_slug:,
      organization_logo_url: nil,
      trusted_metadata: nil,
      sso_jit_provisioning: nil,
      email_allowed_domains: nil,
      email_jit_provisioning: nil,
      email_invites: nil,
      auth_methods: nil,
      allowed_auth_methods: nil
    )
      request = {
        organization_name: organization_name,
        organization_slug: organization_slug
      }
      request[:organization_logo_url] = organization_logo_url unless organization_logo_url.nil?
      request[:trusted_metadata] = trusted_metadata unless trusted_metadata.nil?
      request[:sso_jit_provisioning] = sso_jit_provisioning unless sso_jit_provisioning.nil?
      request[:email_allowed_domains] = email_allowed_domains unless email_allowed_domains.nil?
      request[:email_jit_provisioning] = email_jit_provisioning unless email_jit_provisioning.nil?
      request[:email_invites] = email_invites unless email_invites.nil?
      request[:auth_methods] = auth_methods unless auth_methods.nil?
      request[:allowed_auth_methods] = allowed_auth_methods unless allowed_auth_methods.nil?

      post_request('/v1/b2b/organizations', request)
    end

    def get(
      organization_id:
    )
      query_params = {
        organization_id: organization_id
      }
      request = request_with_query_params("/v1/b2b/organizations/#{organization_id}", query_params)
      get_request(request)
    end

    def update(
      organization_id:,
      organization_name: nil,
      organization_slug: nil,
      organization_logo_url: nil,
      trusted_metadata: nil,
      sso_default_connection_id: nil,
      sso_jit_provisioning: nil,
      sso_jit_provisioning_allowed_connections: nil,
      email_allowed_domains: nil,
      email_jit_provisioning: nil,
      email_invites: nil,
      auth_methods: nil,
      allowed_auth_methods: nil
    )
      request = {
        organization_id: organization_id
      }
      request[:organization_name] = organization_name unless organization_name.nil?
      request[:organization_slug] = organization_slug unless organization_slug.nil?
      request[:organization_logo_url] = organization_logo_url unless organization_logo_url.nil?
      request[:trusted_metadata] = trusted_metadata unless trusted_metadata.nil?
      request[:sso_default_connection_id] = sso_default_connection_id unless sso_default_connection_id.nil?
      request[:sso_jit_provisioning] = sso_jit_provisioning unless sso_jit_provisioning.nil?
      unless sso_jit_provisioning_allowed_connections.nil?
        request[:sso_jit_provisioning_allowed_connections] =
          sso_jit_provisioning_allowed_connections
      end
      request[:email_allowed_domains] = email_allowed_domains unless email_allowed_domains.nil?
      request[:email_jit_provisioning] = email_jit_provisioning unless email_jit_provisioning.nil?
      request[:email_invites] = email_invites unless email_invites.nil?
      request[:auth_methods] = auth_methods unless auth_methods.nil?
      request[:allowed_auth_methods] = allowed_auth_methods unless allowed_auth_methods.nil?

      put_request("/v1/b2b/organizations/#{organization_id}", request)
    end

    def delete(
      organization_id:
    )
      delete_request("/v1/b2b/organizations/#{organization_id}")
    end

    def search(
      cursor: nil,
      limit: nil,
      query: nil
    )
      request = {}
      request[:cursor] = cursor unless cursor.nil?
      request[:limit] = limit unless limit.nil?
      request[:query] = query unless query.nil?

      post_request('/v1/b2b/organizations/search', request)
    end

    class Members
      include Stytch::RequestHelper

      def initialize(connection)
        @connection = connection
      end

      def create(
        organization_id:,
        email_address:,
        name: nil,
        trusted_metadata: nil,
        untrusted_metadata: nil,
        create_member_as_pending: nil,
        is_breakglass: nil
      )
        request = {
          organization_id: organization_id,
          email_address: email_address
        }
        request[:name] = name unless name.nil?
        request[:trusted_metadata] = trusted_metadata unless trusted_metadata.nil?
        request[:untrusted_metadata] = untrusted_metadata unless untrusted_metadata.nil?
        request[:create_member_as_pending] = create_member_as_pending unless create_member_as_pending.nil?
        request[:is_breakglass] = is_breakglass unless is_breakglass.nil?

        post_request("/v1/b2b/organizations/#{organization_id}/members", request)
      end

      def get(
        organization_id:,
        member_id: nil,
        email_address: nil
      )
        query_params = {
          organization_id: organization_id,
          member_id: member_id,
          email_address: email_address
        }
        request = request_with_query_params("/v1/b2b/organizations/#{organization_id}/member", query_params)
        get_request(request)
      end

      def update(
        organization_id:,
        member_id:,
        name: nil,
        trusted_metadata: nil,
        untrusted_metadata: nil,
        is_breakglass: nil
      )
        request = {
          organization_id: organization_id,
          member_id: member_id
        }
        request[:name] = name unless name.nil?
        request[:trusted_metadata] = trusted_metadata unless trusted_metadata.nil?
        request[:untrusted_metadata] = untrusted_metadata unless untrusted_metadata.nil?
        request[:is_breakglass] = is_breakglass unless is_breakglass.nil?

        put_request("/v1/b2b/organizations/#{organization_id}/members/#{member_id}", request)
      end

      def delete(
        organization_id:,
        member_id:
      )
        delete_request("/v1/b2b/organizations/#{organization_id}/members/#{member_id}")
      end

      def search(
        organization_ids:,
        cursor: nil,
        limit: nil,
        query: nil
      )
        request = {
          organization_ids: organization_ids
        }
        request[:cursor] = cursor unless cursor.nil?
        request[:limit] = limit unless limit.nil?
        request[:query] = query unless query.nil?

        post_request('/v1/b2b/organizations/members/search', request)
      end

      def organizations_delete_password(
        organization_id:,
        member_password_id:
      )
        delete_request("/v1/b2b/organizations/#{organization_id}/members/passwords/#{member_password_id}")
      end
    end
  end
end