FreeFeed / freefeed-server

FreeFeed server
https://freefeed.net
MIT License
41 stars 18 forks source link

Rewrite the ext. identity providers config and logic #486

Closed davidmz closed 3 years ago

davidmz commented 3 years ago

Support arbitrary OAuth2 providers, add rich configuration options and configuration templates.

Warning It is a breaking change! The client must be updated together with the server: freefeed/freefeed-react-client#1199. We also must update the server configuration.

indeyets commented 3 years ago

I think it would be better to maintain backwards compatibility. New format can be provided in a separate key for now.

{
  "version":"1.99.0",
  "externalAuthProviders":["google","facebook"],
  "authMethods": [
    { "id": "freefeed", "provider": "password", "title": "FreeFeed password"},
    { "id": "google1", "provider": "google", "title": "Google Sign-In" },
    { "id": "facebook1", "provider": "facebook", "title": "Facebook Login" }
  ],
  "registrationOpen":true
}
indeyets commented 3 years ago

^ I suggest to decouple id which might be arbitrary due to deployment specifics from provider which can be used to provide custom ui elements (icons, warnings, license, etc.)

davidmz commented 3 years ago

Возможно, стоит разбить методы на local и external. Всё таки password и Google/Facebook качественно отличаются.

В частности, сервер может передать сколько угодно внешних провайдеров, и клиент сможет с ними работать, ничего специального про них не зная. А локальные методы требуют отдельной обработки.

indeyets commented 3 years ago

это вполне можно разделять по provider. ну и кроме того я даже не предлагаю сейчас делать обработку password на клиенте. достаточно его отфильтровывать. можно это сделать позже. но я не против выделить local

davidmz commented 3 years ago

Я немного подумаю ещё. Изначально я хотел передавать {id, brand, title}, где brand был как раз «классом» провайдера, для визуального отобоажения. Но потом подумал, что это сложновато, и вероятность того, что кому-то потребуются два разных google-провайдера, равна нулю.