core: improve messaging on flow_manager, authenticate user when they linked their account after not having been authenticateed
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
		
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							| @ -1,4 +1,4 @@ | ||||
| all: lint-fix lint coverage gen | ||||
| all: lint-fix lint test gen | ||||
|  | ||||
| test-integration: | ||||
| 	k3d cluster create || exit 0 | ||||
| @ -8,7 +8,7 @@ test-integration: | ||||
| test-e2e: | ||||
| 	coverage run manage.py test --failfast -v 3 tests/e2e | ||||
|  | ||||
| coverage: | ||||
| test: | ||||
| 	coverage run manage.py test -v 3 authentik | ||||
| 	coverage html | ||||
| 	coverage report | ||||
|  | ||||
| @ -134,7 +134,9 @@ class SourceFlowManager: | ||||
|             SourceUserMatchingModes.EMAIL_DENY, | ||||
|             SourceUserMatchingModes.USERNAME_DENY, | ||||
|         ]: | ||||
|             self._logger.info("denying source because user exists", user=user) | ||||
|             return Action.DENY, None | ||||
|         # Should never get here as default enroll case is returned above. | ||||
|         return Action.DENY, None | ||||
|  | ||||
|     def update_connection( | ||||
| @ -146,17 +148,25 @@ class SourceFlowManager: | ||||
|     def get_flow(self, **kwargs) -> HttpResponse: | ||||
|         """Get the flow response based on user_matching_mode""" | ||||
|         action, connection = self.get_action() | ||||
|         if action == Action.LINK: | ||||
|             self._logger.debug("Linking existing user") | ||||
|             return self.handle_existing_user_link() | ||||
|         if not connection: | ||||
|             return redirect("/") | ||||
|         if action == Action.LINK: | ||||
|             self._logger.debug("Linking existing user") | ||||
|             return self.handle_existing_user_link(connection) | ||||
|         if action == Action.AUTH: | ||||
|             self._logger.debug("Handling auth user") | ||||
|             return self.handle_auth_user(connection) | ||||
|         if action == Action.ENROLL: | ||||
|             self._logger.debug("Handling enrollment of new user") | ||||
|             return self.handle_enroll(connection) | ||||
|         # Default case, assume deny | ||||
|         messages.error( | ||||
|             self.request, | ||||
|             _( | ||||
|                 "Request to authenticate with %(source)s has been denied!" | ||||
|                 % {"source": self.source.name} | ||||
|             ), | ||||
|         ) | ||||
|         return redirect("/") | ||||
|  | ||||
|     # pylint: disable=unused-argument | ||||
| @ -216,9 +226,11 @@ class SourceFlowManager: | ||||
|  | ||||
|     def handle_existing_user_link( | ||||
|         self, | ||||
|         connection: UserSourceConnection, | ||||
|     ) -> HttpResponse: | ||||
|         """Handler when the user was already authenticated and linked an external source | ||||
|         to their account.""" | ||||
|         # Connection has already been saved | ||||
|         Event.new( | ||||
|             EventAction.SOURCE_LINKED, | ||||
|             message="Linked Source", | ||||
| @ -228,6 +240,9 @@ class SourceFlowManager: | ||||
|             self.request, | ||||
|             _("Successfully linked %(source)s!" % {"source": self.source.name}), | ||||
|         ) | ||||
|         # When request isn't authenticated we jump straight to auth | ||||
|         if not self.request.user.is_authenticated: | ||||
|             return self.handle_auth_user(connection) | ||||
|         return redirect( | ||||
|             reverse( | ||||
|                 "authentik_core:if-admin", | ||||
|  | ||||
| @ -201,7 +201,7 @@ stages: | ||||
|             displayName: Run full test suite | ||||
|             inputs: | ||||
|               script: | | ||||
|                 pipenv run make coverage | ||||
|                 pipenv run make test | ||||
|           - task: CmdLine@2 | ||||
|             inputs: | ||||
|               script: | | ||||
|  | ||||
| @ -11,6 +11,7 @@ func (ws *WebServer) configureProxy() { | ||||
| 	u, _ := url.Parse("http://localhost:8000") | ||||
| 	rp := httputil.NewSingleHostReverseProxy(u) | ||||
| 	rp.ErrorHandler = ws.proxyErrorHandler | ||||
| 	rp.ModifyResponse = ws.proxyModifyResponse | ||||
| 	ws.m.PathPrefix("/").Handler(rp) | ||||
| } | ||||
|  | ||||
| @ -18,3 +19,8 @@ func (ws *WebServer) proxyErrorHandler(rw http.ResponseWriter, req *http.Request | ||||
| 	ws.log.WithError(err).Warning("proxy error") | ||||
| 	rw.WriteHeader(http.StatusBadGateway) | ||||
| } | ||||
|  | ||||
| func (ws *WebServer) proxyModifyResponse(r *http.Response) error { | ||||
| 	r.Header.Set("X-authentik-from", "authentik") | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| @ -40,7 +40,6 @@ slug: "2021.4" | ||||
|  | ||||
| - You can now specify the amount of processes started in docker-compose using the `WORKERS` environment variable. | ||||
|  | ||||
|  | ||||
| ## Fixed in 2021.4.2 | ||||
|  | ||||
| - core: fix propertymapping API returning invalid value for components (https://github.com/goauthentik/authentik/issues/746) | ||||
| @ -134,8 +133,8 @@ This release does not introduce any new requirements. | ||||
|  | ||||
| ### docker-compose | ||||
|  | ||||
| Download the latest docker-compose file from [here](https://raw.githubusercontent.com/goauthentik/authentik/version-2021.4/docker-compose.yml). Afterwards, simply run `docker-compose up -d` and then the standard upgrade command of `docker-compose run --rm server migrate`. | ||||
| Download the latest docker-compose file from [here](https://raw.githubusercontent.com/goauthentik/authentik/version-2021.4/docker-compose.yml). Afterwards, simply run `docker-compose up -d`. | ||||
|  | ||||
| ### Kubernetes | ||||
|  | ||||
| Run `helm repo update` and then upgrade your release with `helm upgrade authentik authentik/authentik --devel -f values.yaml`. | ||||
| Run `helm repo update` and then upgrade your release with `helm upgrade authentik authentik/authentik -f values.yaml`. | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Jens Langhammer
					Jens Langhammer