Discourse_api sync_sso custom_fields genera "custom.custom.<field>" nel payload

DiscourseApi::SingleSignOn si aspetta che gli attributi personalizzati siano assegnati in questo modo:

sso.custom_fields['field_1'] = 'value'

# che risulta nella chiave `custom.field_1` nel payload

DiscourseApi::API::SSO.sync_sso() si aspetta che i parametri abbiano:

{ 'custom.field_1' => 'value' }

Ma passa il prefisso custom. a sso.custom_fields
Ciò fa sì che il payload contenga:

custom.custom.field_1

Ho anche aggiunto alcuni test eccessivi per sync_sso

1 Mi Piace

Sarebbe stato molto più semplice, a mio avviso, ma non voglio rompere le app esistenti :grimacing:. Lascia all’utente la generazione dell’istanza SSO.

# frozen_string_literal: true
module DiscourseApi
  module API
    module SSO
      def sync_sso(sso)
        post("/admin/users/sync_sso", sso.payload)
      end
    end
  end
end

Forse domani farò qualcosa di simile (ma più pulito)

# frozen_string_literal: true
module DiscourseApi
  module API
    module SSO
      def sync_sso(params)
        if params.instance_of?(DiscourseApi::SingleSignOn)
          post("/admin/users/sync_sso", sso.payload) 
        elsif params.instance_of?(Hash)
          .... stesso comportamento attuale
        end
      end
    end
  end
end

Cosa ne pensate? La mia app avrà idealmente una singola funzione che genera DiscourseApi::SingleSignOn, e così potrò passarla a sso_login o sync_sso.

Oppure i parametri possono essere definiti così:

{
  sso_secret: ...
  name: ...
  custom_fields: {
    field_1: ...
  }
}

Il che romperebbe comunque le app esistenti.

2 Mi Piace

Una correzione è stata apportata a questo mese scorso:

2 Mi Piace