Extra services should be handled transparently to the end-user. In the wizard, they should be some sort of enum (e.g. drop-down), and in the actual request they should be selected with a single option. Wiring the services together is on the admin.
With that, I propose the following interface:
LFME_BACKEND_DEFAULT: string
: specifies a default backend for /user/ requests.LFME_BACKEND_ADDITIONAL_GNUKEBOX: string,*
: specifies a set of additional domains supporting the old libre.fm/gnukebox API, assuming i can track down its documentation.LFME_BACKEND_ADDITIONAL_LISTENBRAINZ: string,*
: specifies a set of additional domains supporting the listenbrainz API.LFME_BACKEND_ADDITIONAL_AUDIOSCROBBLER: string,*
: specifies a set of additional domains supporting the last.fm API.LFME_BACKEND_ADDITIONAL_HACIENDA: string,*
: specifies a set of additional domains supporting the hacienda API, when documentation for it is released.?backend=(last.fm|libre.fm|listenbrainz.com|{LFME_BACKEND_ADDITIONAL_*})
: the first 3 will be builtin, although it will only be mandatory to specify API keys for one, plus the keys for $LFME_BACKEND_DEFAULT
user.service
: never nulluser.service.type
: (audioscrobbler|listenbrainz|gnukebox|hacienda)
user.service.domain
: the string for the service's domain.