I've just done the code review. Apart from below, the patch looks good to me:
1) Move the auth source constants -ldap, kerberos out of app object. They don't belong there. You can create the constants somewhere else and import them.
+app.PGADMIN_LDAP_AUTH_SOURCE = 'ldap'
+app.PGADMIN_KERBEROS_AUTH_SOURCE = 'kerberos'
2) Are we going to make kerberos default for wsgi ?
--- a/web/pgAdmin4.wsgi
+++ b/web/pgAdmin4.wsgi
@@ -24,6 +24,10 @@ builtins.SERVER_MODE = True
import config
+
+config.AUTHENTICATION_SOURCES = ['kerberos']
+config.KERBEROS_AUTO_CREATE_USER = True
+
3) Remove the commented code.
+ # if self.form.data['email'] and self.form.data['password'] and \
+ # source.get_source_name() ==\
+ # current_app.PGADMIN_KERBEROS_AUTH_SOURCE:
+ # continue
4) KERBEROSAuthentication could be KerberosAuthentication
class KERBEROSAuthentication(BaseAuthentication):
5) You can use the constants (ldap, kerberos) you had defined when creating a user.
+ 'auth_source': 'kerberos'
6) The below URLs belong to the authenticate module. Currently they are in the browser module. I would also suggest rephrasing the URL from /kerberos_login to /login/kerberos. Same for logout. Also, even though the method GET works, we should use the POST method for login and DELETE for logout.
+@blueprint.route("/kerberos_login",
+ endpoint="kerberos_login", methods=["GET"])
+@blueprint.route("/kerberos_logout",
+ endpoint="kerberos_logout", methods=["GET"])