From 83c94acbac54d7e7aa79a119e9d5d078ffb117ec Mon Sep 17 00:00:00 2001 From: Kobe Date: Thu, 12 Jun 2025 15:07:01 +0200 Subject: [PATCH] step one of launch instance --- routes/__pycache__/main.cpython-313.pyc | Bin 88691 -> 88871 bytes routes/admin_api.py | 28 +- routes/main.py | 9 +- templates/main/instances.html | 367 +++++++++++++++++++++++- 4 files changed, 392 insertions(+), 12 deletions(-) diff --git a/routes/__pycache__/main.cpython-313.pyc b/routes/__pycache__/main.cpython-313.pyc index b18bbe38245ba0f3bff03639de5ac7597b10fd9c..41d000da08f0b48cc9187592fa6c651b0579ae4f 100644 GIT binary patch delta 4571 zcmb7IdvudU7SGMIZTb=jrM1w~2kocy!J{dbqODT((1OLbC>E(H4JCafbrOSsJUoZG zE}$+u;pXD=yChUkNNJ* zy}x_!+_^Jh@UMnle>cPr#>K^G#NS(oW-WO-b#MIhjXd_1XlB}C~^Fm zriJ{5x3lt>k8HO&oCOZ2+hcPsvb*z_c-q?(T_8FnVZFi#J0U=^@I1S7PO2CNqMPlW z2CuE{K0DK4%E&&zvO}0N3tOK1+zk%rVpmw39TRhIqkwe$tzjil_<+A@&()sM@b5Zj z^686P_@sBTlRr)vcQ|e8@tnfrg*P6bSaRN^ODrAG=%Pz~zQs&u{0xfy{Mwdc`iw7X znMD13Q%iQ@Nr*oLyaqVMUvHV1^$~{UfCT`ldJdxjzTV`%>~R}5 zKJ#r{#v`hsZAQTRYRt!^32q zom$fRzV1}@*`Zy#nN`4Iq6nW|1sDOi9kNmUZ|i2w9_9*!rvO(7HK1>Fx!PDPwEu-Q zV=$7n_9{MK2VCG)>r)cLKBZ&LcyL@0tyniS!Adv-NpWc=R?^ zoUWbQPSYS?zkNmBL})62Jb+92eVlsv>~2Q4@fW&_sL%IRcY=YYaAQwp)D)r6tz`@N{GN&t zA@*)#uzyV9dwLF5T3{5r5imGB_I5Xe65EAn7Gs3-!kRG(8ITRK+Z&t&>FNG;2L+uqP!q)Xjk!(jRxbpHGTIIX{<%MS2z~4Ju*UH6Y zAkN+H>1c44eVnyXe4($5Vw-v2(aicy zko3YL9vJKie0Bk3WFc4C7RZ9fMvMYcLvgtS2D{hp^spXi%RmsRdzAR(R5glwj^)!j z-ye_ln|`=gp6GpqHu0V}${D%Q>$`o@otOwzQD9RUsJzwetzQNGiC?MCxf_!Uejx1HXiY=G0+A&D4w z>t%ZlM9VBWZS8hug~~LZea1?;e8Cyl>JkX#Wf_hVS!3HV5#FtExUzn)!IE-7xNk^j z--iqyGo(da_hA!ONRJ9|>jmKL$4dCDvsO}k51!4|3x{@{tIhglUdeHhrwvqzUfwov zPYfmTH!pdG?#yr2(RP05o202_@LXP=GcbA_wAW*F10VyRsONy*;}97shY&`J_-)^s zOMW)G;57r~wSb5?P2%7@{%t0e@n^qnr4C=#;-u5LHd3OcN&m}ob><$ujYF+@lF z$D*i^#H=BPy!4*>Kn(qZ-chHSsfgzLoo2G?&BL;w_9V~*V=#^C`w6s-4)~WPQn9%v z-2de*`u|)4-Nb%}FscFQ6s!@jNY$m%yvB$_Cs#@`$s^C8ti5f}!D1zP*gkKDRBm>J zosgoEsUEgcnt9m8qAC+;`f7QvB)}(GR_idbz?{r^CqB0VWP=fhEZ9ZZ6$)0oRU_OE zbq#heEHXf`FcFCLxIDJD2GKwgoE|rm%|?2@McqA?(rKf5Nc^MK8~o?T(i+o^p-W{L zLp`kh>RnK;veHPSO#4#xU^e9?N zQ3G98_vKMtVx$vlMm{}g?1Y6S>h21f;6Id4<4jo*6)T@8O$fyS2)S9eS4-Ar0{%F<(DP;_Ja|_<_6*N-aTt=}}r0y!C29rtrEOx&eB=QTQ z7F|JzLs(`mucOJ%h8Z%0QqSxit|2=0-!my^Jnm2NxSj@@kZTN!*>xf6tYALPYGno8 zO&R{~3Oa9S4)I-4I~-F9?92d62aJU6s{|}JdR(n`XF3}VNrgz|^4J1fhoitdsQ~xT z&@UX7s%RVys_9i!Cz9Z;qFnk?-BCqj>4Lhiic*3v2kEj!?W>}NG}B)`n_kxjf1=6O ze!V)nn)2q!|8e*lo2CJ$0T2a<1Ec~n0abu%Kn-9X0FP~UKVT(b4WJY7u=->*<%q+7 z0RL2~r>ki${Z^emm-Zx&Hk1zPG{&)jQGoFSMj;z0^c!!d$BcARed10!PZjFJ^XXK~ Ml4PnRHbeOLKLa|Er2qf` delta 4469 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 diff --git a/routes/admin_api.py b/routes/admin_api.py index f044450..fad2521 100644 --- a/routes/admin_api.py +++ b/routes/admin_api.py @@ -572,11 +572,33 @@ def test_nginx_connection(): return jsonify({'error': 'Missing required fields'}), 400 try: - # Test NGINX Proxy Manager connection + # First, get the JWT token + token_response = requests.post( + f"{url.rstrip('/')}/api/tokens", + json={ + 'identity': username, + 'secret': password + }, + headers={'Content-Type': 'application/json'}, + timeout=5 + ) + + if token_response.status_code != 200: + return jsonify({'error': 'Failed to authenticate with NGINX Proxy Manager'}), 400 + + token_data = token_response.json() + token = token_data.get('token') + + if not token: + return jsonify({'error': 'No token received from NGINX Proxy Manager'}), 400 + + # Now test the connection using the token response = requests.get( f"{url.rstrip('/')}/api/nginx/proxy-hosts", - auth=(username, password), - headers={'Accept': 'application/json'}, + headers={ + 'Authorization': f'Bearer {token}', + 'Accept': 'application/json' + }, timeout=5 ) diff --git a/routes/main.py b/routes/main.py index f237b08..cae30ba 100644 --- a/routes/main.py +++ b/routes/main.py @@ -376,7 +376,14 @@ def init_routes(main_bp): db.session.commit() - return render_template('main/instances.html', instances=instances) + # Get connection settings + portainer_settings = KeyValueSettings.get_value('portainer_settings') + nginx_settings = KeyValueSettings.get_value('nginx_settings') + + return render_template('main/instances.html', + instances=instances, + portainer_settings=portainer_settings, + nginx_settings=nginx_settings) @main_bp.route('/instances/add', methods=['POST']) @login_required diff --git a/templates/main/instances.html b/templates/main/instances.html index dc68d1e..1bb01e4 100644 --- a/templates/main/instances.html +++ b/templates/main/instances.html @@ -122,24 +122,230 @@ + + + + +