From 7aa96119a99de09f111fe8f2ecb5f99d3114b7b0 Mon Sep 17 00:00:00 2001 From: Kobe Date: Sun, 8 Jun 2025 21:54:29 +0200 Subject: [PATCH] Master instances --- routes/__pycache__/contacts.cpython-313.pyc | Bin 24278 -> 24278 bytes routes/__pycache__/main.cpython-313.pyc | Bin 77824 -> 78535 bytes routes/main.py | 13 ++++++++-- templates/common/base.html | 25 ++++++++++++++------ templates/main/instances.html | 20 ++++++++++++++++ 5 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 templates/main/instances.html diff --git a/routes/__pycache__/contacts.cpython-313.pyc b/routes/__pycache__/contacts.cpython-313.pyc index efe899d2aa534bde4bb0dd0cd079d1aeaf8d3228..2064f655c1d44d083f7cc16a087faa37da0aa783 100644 GIT binary patch delta 22 ccmcb%m+{(OM()qNyj%=GVE)o|Blqbz09`o;l>h($ delta 22 ccmcb%m+{(OM()qNyj%=GFny8JM()#b0A3&ms{jB1 diff --git a/routes/__pycache__/main.cpython-313.pyc b/routes/__pycache__/main.cpython-313.pyc index 52cdf19044acc93ee919f34b881a8431e6f57cb3..321d4b778cc2f842c16ae5df2a5a4e7e3317b5da 100644 GIT binary patch delta 9226 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 delta 8499 zcmbtZ3v|@gnV&oFWF`;ZF_B~vLc)YsfFuOO2vJ@We82>$g2W*+Nrq$|-2V)a_z1z% zy0vZH6tCCeb?rf>{Rm*DM964uXu2*_#uC1j;*6`oCaxVSNX_@DnFXuB&Zp#ASLb=da zD{Fm=Wc?x@bhRw@Es;w`nAFKSn&fV&_ch3dk+G$6DKl)8joZ8`UNO~PVcO>1lu!rT zr`YnSwOid>Hr2YVX476Z+*s^hDE#@$EFRGG;mgczP4xomF`48Q{(@qYT-j;!7M{a^ zH%B?lTUE?lE(+8E^W*8wmSrOMPY#o5d+B#fn@ws_@f3B$ddlv1L`t_h)o@|0xwTZe z?e(tGQKlY~sHQ?rpQzFlh%^aP~rM8}nk z_rwChP_S)Bue=^}ZX~GIZDB1MOX!xKP*iRKVJ`8OlIe7NARZ4zgVLimteq*!)y}oG z4NE}e)Dp4-`;@cLwI>tp(byhYiH;=@?Uj?MC2s;u2h32zYs;@_N7DkBL*Vtw1lmc! zZonRZ2DlB-1qcIn0@_vWI*-_>Hm)lYUsF5R)y(R~a0DO;ba$*LNQ!Su$bi-*V;GOC z!F4tED4M&}f3BNX%p&bYzZcL4xCL;ln!i3S>eCOdziD#XwS8TIcuKWKo)X7ZL3FM| zx6$duWcrHeb}{u%qW4<#T+&;(qb<=J57A*h5$oLiGcY<1_&MMgfPV-467a7CUZ;Ek z?JuYN6)0_T11OKHNPI{%s|CCET-i?px-A&mk?hp19Wfb!3-p9E!}!2oH^(&H8V@A8 ztJ(^9D zpTOWVsz9q3^=h?NBmC*O_P)(^6~+z!Rb9O`CC^g?*5CvCOdmTj-oh(EKXy`mUxPTQdiqK!7JRGEU-;2Pf)DztN>2X;*F`4_77sfY%f|G=TRyRF zevW48LY%%ti71n`Ixdh%4=>U^_3_xSDK$!Z+7~|ifGO#J+70{ZD7VqdRx?iZkDMY6s zw0qp1%s*MLuDh#A6sPaG%VF&wqOZDpb2N}lbj2h^@ZdQ`v%Kap`@`0}`PoC(bCC}y zmDJVN8L=XJ;3(Y;(fHKQqI(hf4x4o+j%{)Wa@-8aX(m#Shoq~%XM_D3>S;&SKR>Wa zJ$28mcKBXjl{#>DdHSY%%f;3quq~xovW%cr9;3e3m6cF>@NEOACWywe6yO7=yw}hw zAGiGJ1MBPoEFYxhSE|nY=1_vZ_r78gWPZ#5&`LVOx@_6r+%b!f_W{aLad<3e;4!O0 zQ(l1psU>?78gVpX_xbm45)l=+e;ciO?EWoc`w-U1?3I^n{c3y7Y*V)fLp>o9;Ue4B z9%vRx_2dJ4X}yK1?Ku=5zx~kCE8rFs#CM0HljnK+mUSZIlHRd&0q1xgIlY zkwCadlSh^Hpzqp6kbD_V;xYjHXCAe5TT-LiLN5q`x-Aik#Cu3VntT}(8bOiUu1U&p zvF=dR+hCmG?Wrebh@$?iTTQ`&Zpc94KM{_0YH~Ihlwdpu-G_givFjRLoF{f`?H(5v2MHL>!$sV=dr_#l(`N)JWmXyUwHUqyK4wv4dYS2espK$jUe0#*ao->upQ6_xEau> zwjJ?a3d{ae9-U8gK}Nev>9bdmjUGHwRmpyJJJ_?!bI9ZK8x47M5bE6{rSty-G#OKr zzeo2?0&*W5wS14-S?6zf>?$#wzU8q;ELRVKGHdt{m<~tlk(o{CmIN7Fb`ub~b zVm^f}Lr@ied@kLJzW;c6B@4t7Smb(0fPEQaSZIoegV66Dzsm7GqQK`SHSkzfdeak^ z+H1j4HWT!@*3fx*$gKm*J$>#g{hQW!*jSf)WHY!KN3I?myg>xir-Q5N8)%dS%b3Dp zD_fSH!{^E6&M>(DhTyPSehcmARrIGd;+XpGPdD0)UBCsV^!MZAOMnSlheyaOv+JXk z)jT_Y6-d~8*+74WE-PdREog;L$ZO4t%9d*A$4cKlHbX;q9&Hf$>0?Ji`=8n*e?S-Q5%GjI|j-J1CPF-=kWenMd0i zc;=>YCxLjQJ1NYBIl^bQm-TD#GOP^6raT3B6>tyWG(ZQG0uZTmE8lM3K>x38;AWz^ z$PT{Bng0&_S=Ve$L+EBt-(iH}Me3Dbl~x#4GAo6vWIhmB9@zo@Q9zjftWRuC2cGTC zAs>6~B@YFm^Do^fexkO#e7W~t+SNH&4qa>QJ#>Ey$8}qRZiOKVCil}v&V4r%o2Or1 zC(_FP%6ux5>t0EgAqh!LC&GDPAaslD+>yzZCtg`62Gyif^C)*UowA4;D9~$>_t76+ zw9_pz5=&A7Gu(O~-@fH{@bPNCeD8a;QT&TK`fBss?_#2jrIA0Tw)_F$dw>TCG#j>i zvu7XiP*ta|p(|SQbghH01fQAIW2b*$H)Ks;t4Az>hiHn|Em^bsum@;Mcgj!)UFPV2 z#!kjK8SFvN9kIH$K*C5-IW$Vio*f|*JLDs3<{PU^veI#hXB>vdvvMWLc-tF|;>YPH z-?+|3s&Tw^%C=*OIC1PUV#|4SxeDHZ)&&4>A)Ds^jIoQ9!gPD!@YI6uD2AmKU{fpK zxjxM4KAXLmkk{g6R)UZNO(N3Md*`%df^rG}mxj<*H+sW1v@8rMbSZ!9({JFfA(myR3}=46Y5Y~l9*KB~$6 zSc|h5OLulux-pl>qaZ=uMvjDxa!Y8zK1BWFg764H^kqn4w}lgcv z{du9Ic?j#HoEmdLS^MSi(}u4>0G=_%T*nQAO>MV|3Xz{0u!>9a6OhmD@73r+A?>M0 ztYYirMcQs9SQJ|BKKuK42I|IgA~>NTAze$wWMvkiWqQAJcB3K6-bWs81E! z#d2});AXq1qmVIpms3o$jy2EJqi#{N#3+@(Du4VB7@L{wmGO7*g>m@d_)kfmHxbwU|Md&dV{-1juID z{}VI5-A&~rEF|*x7y1+jc)kkr>2mU&;AfnR_d}%v0Cp@+!>b`7t8_v_W^3WBY{85g zK(>&YZMuQ_nLW~eaR3uF!+bdxa|X7zClj%bjtS2b#+94($8}dL->Z#Wd|B#vkth?E z!81kTAY5ypMC>q6NXO(p9ByHg^zP2>w;@f&sSM$;echpvZJ^$RnR*K+`bbub9&org zFR~`%(cvtV@-7J3=(nWk#raZ-2dPrA!f`znvD%Bc&Q_)_l#0hm`hP4FRrbq=Fsm7m z)mhfYzdR1Vm6}{7R!yBWC+kz+tQL);d+^_?MH5*^O4N|Y=3%v&fKvdz{hg+k?u-PwLqYl} z(OX78xY1Kf+m5(w08JBMHDD0%0pPy?p8!4uxFAUhU>2YXFc(k@*aBz=#MS`!0&W4^ z1^6cbS8Y$B^$Wl&fU^MJ=?7^258!=TPAgOK_2p%BwV;mf;+!ri|Ink^d7>!=$seq# zd2>Z-@WZ*H)yhw{-c>1It*EQiT^&6Et-Foxkm0Cd;ZTZhkHqLDOHb z*9CZw&MHmM-xHGEeW7IMf@A^@j98F=xOf?MSA&nNa>+bSq`WGuu)Y~OLx%9 zv~(xEAN6YT8zeFPfJHAj#)~1nM>5kY(^8sMjj3}0$g-T@*{1Y-V-tH49SiU}X+)qQ z(1cTuEE3Dx-^QeV0CY0;2Ot{LohxX!$(~S?%p)%$0+V)x;6sZL;*6>Ll&Sk=Q}-ED f-5<>+(QNr6k&MTWFp^rmSoG#>nl5tr_o)8`zYM~y diff --git a/routes/main.py b/routes/main.py index be016a9..a1792dd 100644 --- a/routes/main.py +++ b/routes/main.py @@ -1,6 +1,6 @@ -from flask import render_template, Blueprint, redirect, url_for, request, flash, Response, jsonify, session +from flask import render_template, Blueprint, redirect, url_for, request, flash, Response, jsonify, session, current_app from flask_login import current_user, login_required -from models import User, db, Room, RoomFile, RoomMemberPermission, SiteSettings, Event, Conversation, Message, MessageAttachment, Notif, EmailTemplate, Mail, KeyValueSettings, DocuPulseSettings +from models import User, db, Room, RoomFile, RoomMemberPermission, SiteSettings, Event, Conversation, Message, MessageAttachment, Notif, EmailTemplate, Mail, KeyValueSettings, DocuPulseSettings, PasswordSetupToken from routes.auth import require_password_change import os from werkzeug.utils import secure_filename @@ -332,6 +332,15 @@ def init_routes(main_bp): is_admin=current_user.is_admin ) + @main_bp.route('/instances') + @login_required + @require_password_change + def instances(): + if not os.environ.get('MASTER', 'false').lower() == 'true': + flash('This page is only available in master instances.', 'error') + return redirect(url_for('main.dashboard')) + return render_template('main/instances.html') + UPLOAD_FOLDER = '/app/uploads/profile_pics' if not os.path.exists(UPLOAD_FOLDER): os.makedirs(UPLOAD_FOLDER) diff --git a/templates/common/base.html b/templates/common/base.html index 9d223c4..b10e50d 100644 --- a/templates/common/base.html +++ b/templates/common/base.html @@ -58,6 +58,11 @@ {{ current_user.username }} @@ -83,6 +89,18 @@ Dashboard + {% if is_master %} + + {% endif %} + {% if not is_master %} -