
    Ɉi*              
          d dl mZmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlm Z!m"Z# d dl$m%Z%m&Z& d d	l'm(Z( d d
l)m*Z* d dl+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl m7Z7 d dl8Z8d dl9Z9d dl:Z:h dZ;ddddZ< ed      Z=e0e=j|                  _0        e=j                  e4e2       h dZ@ G d de      ZAe=j                  eA       e=j                  eg dddgdg       e=j                  d e	d !      d "       e=j                  ej@                         e=j                  e#       e=j                  ej@                   e7e,      g#       e=j                  ej@                   e7e,      g#       e=j                  ej@                   e7e,      g#       e=j                  ej@                   e7e,      g#       e=j                  ej@                   e7e,      g#       e=j                  ej@                   e7e,      g#       e=j                  ej@                   e7e,      g#       e=j                  ej@                   e7e,      g#       e=j                  ej@                   e7e,      g#       e=j                  ej@                   e7e-      g#       e=j                  ej@                   e7e,      g#       e=j                  ej@                   e7e-      g#       e=j                  ej@                   e7e-      g#       e=j                  ej@                   e7e,      g#       e=j                  ej@                   e7e-      g#       e=j                  e!       e=j                  d$      d%        ZFe=j                  d&      d'        ZGe=j                  d(       ed)       e7e%       e7e-      fd*eId+ed,e6d-eJfd.       ZKy)/    )FastAPI
UploadFileFileHTTPExceptionRequest)CORSMiddleware)StaticFiles)JSONResponse)BaseHTTPMiddleware)authasimposition_typemass_templatescheduleunavailabilityspecialportal
shift_swapdailyreportareaposition_slotarea_unavailability
attendanceseat_layout)routerpublic_router)get_dbSessionLocal)Asim)SystemSetting)get_current_userrequire_pengurusdecode_token)limiter)_rate_limit_exceeded_handler)RateLimitExceeded)Session)DependsN>   	image/jpg	image/png
image/jpegjpgpng)r,   r*   r+   zASIM Scheduling API)title>   /api/auth/login /api/settings/maintenance-status//api/healthc                       e Zd ZdefdZy)MaintenanceMiddlewarerequestc                   K   |j                   j                  }|t        v r ||       d {   S t               }	 |j	                  t
              j                  t
        j                  dk(        j                         }|xr |j                  dk(  }|j                          |s ||       d {   S |j                  j                  dd      }|j                  d      r4	 t        |dd        }|j                  d      dk(  r ||       d {   S 	 t!        d	d
di      S 7 # |j                          w xY w7 7 -# t        $ r Y 5w xY ww)Nmaintenance_modetrueauthorization zBearer    rolesuper_admini  detailzSistem sedang dalam maintenance)status_codecontent)urlpathMAINTENANCE_BYPASS_PATHSr   queryr!   filterkeyfirstvaluecloseheadersget
startswithr$   	Exceptionr
   )	selfr6   	call_nextrC   dbrowis_maintenanceauth_headerpayloads	            */var/www/html/asim.com/backend/app/main.pydispatchzMaintenanceMiddleware.dispatch)   sE    {{ ++"7+++ ^	((=)00!!%77eg  !8SYY&%8NHHJ"7+++ oo))/2>!!),&{127;;v&-7!*7!333 8 @A
 	
5 , HHJ , 4 si   *ED$EAD& E/D;01E"-D? D=D? E&D88E=D? ?	EE
EEN)__name__
__module____qualname__r   rW        rV   r5   r5   (   s    "
g "
r\   r5   )zhttp://localhost:3000zhttp://localhost:8000zhttp://localhost:8001zhttp://localhost:8002zhttp://localhost:8003zhttp://localhost:8004zhttp://localhost:8005zhttp://asim.goteku.comT*)allow_originsallow_credentialsallow_methodsallow_headersz/uploadsuploads)	directory)name)dependenciesr2   c                  
    ddiS )NmessagezASIM Scheduling API is running!r[   r[   r\   rV   rootrh   ~   s    899r\   r3   c                      dddS )NokzASIM Scheduling)statusservicer[   r[   r\   rV   healthrm      s    '899r\   z/api/asim/{asim_id}/photo.asim_idfilerQ   _c                 6  K   |j                  t              j                  t        j                  | k(        j	                         }|st        dd      |j                  t        vrt        dd      |j                  d       d {   }|j                  d       d {    |d d d	k(  }|d d
 dk(  }|s|st        dd      |j                  r|j                  j                  d      }|j                  ddd      }|j                  d      r|j                  dd      d   }d| }t        j                   j#                  |      rt        j$                  |       t&        j)                  |j                  d      }	d|  dt+        j,                         j.                  d d
  d|	 }
t1        |
d      5 }t3        j4                  |j6                  |       d d d        d|
 |_
        |j9                          d|j                  iS 7 7 i# 1 sw Y   7xY ww)Ni  zASIM tidak ditemukan)r@   r?   i  zFile harus berupa JPG atau PNG   r      s      s   PNG

z&Konten file tidak valid (bukan gambar)r2   zuploads/   httpz	/uploads/r-   zuploads/photos/asim_rp   .wb	photo_url)rE   r    rF   idrH   r   content_typeALLOWED_CONTENT_TYPESreadseekphotolstripreplacerM   splitosrC   existsremoveEXT_MAPrL   uuiduuid4hexopenshutilcopyfileobjro   commit)rn   ro   rQ   rp   r   headeris_jpgis_pngold_pathextfilenamebuffers               rV   upload_photor      s     88D>  G!34::<D4JKK  554TUU 99R= F
))A,BQZ?*FBQZ//Ff4\]] zz::$$S)##J
A>v&~~k15b9H!(,H77>>(#IIh ++d''
/C%gYa

0@0@!0D/EQseLH	h	499f- 
 XJDJIIK$$9 !( 
	s=   BHH	H!H
"DH6!H1H
HHH)Lfastapir   r   r   r   r   fastapi.middleware.corsr   fastapi.staticfilesr	   fastapi.responsesr
   starlette.middleware.baser   
app.routesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   app.routes.settingsr   settings_routerr   settings_public_routerapp.databaser   r   app.models.asimr    app.models.system_settingr!   app.core.securityr"   r#   r$   app.core.limiterr%   slowapir&   slowapi.errorsr'   sqlalchemy.ormr(   r)   r   r   r   r}   r   appstateadd_exception_handlerrD   r5   add_middlewaremountinclude_routerrL   rh   rm   postintobjectr   r[   r\   rV   <module>r      s   E E 2 + * 8 I  I  I  I  I b -   3 N N $ 0 , "    	@ U
G)* 		    +-I J #
. #
L   ( )   	 %%  $ 		*kI6Y	 G   4;;    ) *   6==@P8Q7R  S   :$$@P8Q7R  S   >((WEU=V<W  X   &--WEU=V<W  X   8??@P8Q7R  S   7>>@P8Q7R  S   5<<@P8Q7R  S   :$$@P8Q7R  S   ;%%w?O7P6Q  R   4;;@P8Q7R  S   =''@P8Q7R  S   =''@P8Q7R  S   6==@P8Q7R  S   4;;@P8Q7R  S   =''@P8Q7R  S   ? # : : : : 
%& Cy&/()	+%+%
+% 	+% 	+% '+%r\   