o
    5)ÿir  ã                   @   sV   d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
 G dd„ deƒZeƒ ZdS )	zJ
Authentication Middleware
API key authentication for protected endpoints
é    ©Úwraps)ÚrequestÚgÚcurrent_app)ÚApiResponseMixin)Ú
get_loggerc                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚAuthMiddlewarez%Middleware for API key authenticationc                 C   s   t dƒ| _d S )NÚauth_middleware)r   Úlogger)Úself© r   ú</var/www/html/oms-prod-mcp/app/middleware/auth_middleware.pyÚ__init__   s   zAuthMiddleware.__init__c                 C   sŽ   t j d¡pt j d¡}| j dt j¡ | j d|› ¡ |s!dS | d¡r,|dd… }tj d	g ¡}| j d
|› ¡ ||v rE|t_	dS dS )z…
        Authenticate request using API key from header

        Returns:
            True if authenticated, False otherwise
        z	X-API-KeyÚAuthorizationzHeaders: %szExtracted API key: FzBearer é   NÚAPI_KEYSzValid API keys: T)
r   ÚheadersÚgetr   ÚdebugÚ
startswithr   Úconfigr   Úapi_key)r   r   Ú
valid_keysr   r   r   Úauthenticate_api_key   s   
z#AuthMiddleware.authenticate_api_keyc                    s   t ˆ ƒ‡ ‡fdd„ƒ}|S )zù
        Decorator to require API key authentication for a route

        Usage:
            @app.route('/protected')
            @auth_middleware.require_api_key
            def protected_route():
                return 'This is protected'
        c                     s:   ˆ  ¡ sˆj dtj› ¡ ˆ dddœ¡S ˆ | i |¤ŽS )Nz#Unauthorized API access attempt to zValid API key requiredz#Missing or invalid X-API-Key header)ÚmessageÚerror)r   r   Úwarningr   ÚpathÚunauthorized)ÚargsÚkwargs©Úfr   r   r   Údecorated_function8   s   þz:AuthMiddleware.require_api_key.<locals>.decorated_functionr   )r   r#   r$   r   r"   r   Úrequire_api_key.   s   

zAuthMiddleware.require_api_keyN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r%   r   r   r   r   r	      s
    r	   N)r)   Ú	functoolsr   Úflaskr   r   r   Úapp.utils.api_response_mixinr   Úapp.utils.helpersr   r	   r
   r   r   r   r   Ú<module>   s    
;