From 482211e6e079129c25fdcfe8d97ffc0a6417729c Mon Sep 17 00:00:00 2001 From: cedrick2711 Date: Sun, 19 Jul 2026 00:36:11 -0400 Subject: [PATCH] =?UTF-8?q?ajout=20de=20s=C3=A9curit=C3=A9=20pour=20le=20U?= =?UTF-8?q?RL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/models.cpython-313.pyc | Bin 42677 -> 42672 bytes instance/team_tryouts.db | Bin 167936 -> 167936 bytes models.py | 4 +- .../__pycache__/evaluations.cpython-313.pyc | Bin 11012 -> 11431 bytes routes/__pycache__/matches.cpython-313.pyc | Bin 34206 -> 34206 bytes routes/__pycache__/teams.cpython-313.pyc | Bin 14704 -> 14550 bytes routes/__pycache__/tryouts.cpython-313.pyc | Bin 25719 -> 27083 bytes routes/__pycache__/users.cpython-313.pyc | Bin 72897 -> 73364 bytes routes/evaluations.py | 12 ++++++ routes/matches.py | 2 +- routes/teams.py | 14 +++--- routes/tryouts.py | 27 ++++++++++++ routes/users.py | 40 +++++++++++------- 13 files changed, 76 insertions(+), 23 deletions(-) diff --git a/__pycache__/models.cpython-313.pyc b/__pycache__/models.cpython-313.pyc index 8b8238c899f50d87564aa6d4fc2debb6a7dc40bd..a023f1bf1f2a5e73ac25033578d3027e72e6b9aa 100644 GIT binary patch delta 72 zcmdmbmTALTCf?7yyj%=G5V$8gD{vyOBxBb^^{bm07ppN^P8L)bp1fUMh%+g%q$DRb cFSTUzW%c@6<{QGIlS7v}G5T$uu~e230Bp<{)c^nh delta 67 zcmdmRmTBu*Cf?7yyj%=G@T4#*t6?IqBxB!1^{Xtwf`N=1|14Hxw3@s?U3GG&y4dDh X>czFpw}hQ12P}1B^xr&rsVpM^8L$`8 diff --git a/instance/team_tryouts.db b/instance/team_tryouts.db index 283fc39a0292170938b24c0022eb2b66f8a5eea5..cd70a1863e7b37633fb4a8fd689b990cd8fc872f 100644 GIT binary patch literal 167936 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 R7iqbgD*G|(78^wE`37y$RP_J= literal 167936 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 S_Xg^Hu^D+4hi;Fl$MFlV*8h|M diff --git a/models.py b/models.py index 82d761a..eedd70e 100644 --- a/models.py +++ b/models.py @@ -212,7 +212,7 @@ GAME_PLATFORMS = { 'League of Legends': [], 'Counter-Strike 2': [], 'Apex Legends': ['PC', 'PlayStation', 'Xbox', 'Nintendo Switch'], - 'Overwatch 2': ['PC', 'PlayStation', 'Xbox', 'Nintendo Switch'], + 'Overwatch 2': [], 'Rainbow Six Siege': ['Ubisoft', 'PlayStation', 'Xbox'], # Ubisoft = Uplay/Steam 'Rocket League': ['Epic', 'PlayStation', 'Xbox', 'Nintendo Switch'], # Epic uses EpicID, others use username 'Super Smash Bros.': ['Nintendo Switch'], @@ -236,7 +236,7 @@ TRN_URLS = { 'League of Legends': 'https://tracker.gg/lol/profile/{username}', 'Counter-Strike 2': 'https://tracker.gg/cs2/profile/steam/{username}', 'Apex Legends': 'https://tracker.gg/apex/profile/{platform}/{username}', - 'Overwatch 2': 'https://tracker.gg/overwatch/profile/{platform}/{username}', + 'Overwatch 2': 'https://tracker.gg/overwatch/profile/battlenet/{username}', 'Rainbow Six Siege': 'https://r6.tracker.network/r6siege/profile/{platform_code}/{username}', 'Rocket League': 'https://rocketleague.tracker.network/rocket-league/profile/{platform_code}/{username}', 'Super Smash Bros.': 'https://tracker.gg/smash/profile/{username}', diff --git a/routes/__pycache__/evaluations.cpython-313.pyc b/routes/__pycache__/evaluations.cpython-313.pyc index 817648e74026f9d1afbf3425f54bb6b31cf72015..a6d2ad991ee18c8b7ad1fe643e6a8b0ce49283d8 100644 GIT binary patch delta 2439 zcmbVNT}&KR6ux(M_IGx6c9|V!c9~svVFeb-($zw{XfZV@lvWDtID|SOxGEwoUC1nI zc=1V}jET*8Y!myS)jkO!#wY(`j4ztdVnW;W!G}H=6Ju#fOnCC%U1k>OG$Bqhch0@% zJ3n*Ix#xT^@x_JEW1bHn^32>ZF5YZe4V?`5By-`NrI||4+H&9}hEaL=Huy~|#Z;eS z*rMv+7Nj%17=CC?U=}c+mfXF###1MdSJ>5gKAk zzY?`cOKq_QPVpiHo)%;h}eLDGoZl+ za83XaA{-xdgzJ&;6C4laM7$ll z&{7;BJzT8H<1Ba^x@!`I9^ONLw1@s}4=spw{J2H$@q@4Wu_A`xwkWDbx9y-E?rsjD zQLM@Ex0ohIg{YK}b#`91ksjMsf;6&lDk>eP2*pO!f2NA4pIfn``iVpgK90)7##fD! zo9^TAeN=9$2hD!~-vnDx`MEkjaDcDcmbe2xre$fAT1eQ4;C@8?{D4mTD(L)v3HVf! zrl?MG4{MJeA-j~dn|v^zw(0Hp7K`3Cow19`}dz(KI;1;A9xCCfBYR{PU_-tadwDpOeXOR>4Fw72;~N2(DJQ#2Daoj z_)(T)O?%_F4?&t19-$2mniW}oqAO~0StPyiJ5~*9D(!ovSyIYYs}y~cSW6U`;%HUF zFN%z7U6`~%R+oxn@K+|@uS;4o$BZ!}d4xEWLS?Zm8Jgv#)~qwSOJ{XaOBLK1RAEx& zElY2qYglG8rJbooJ1y_%}X?2VkIS zn;Re|Oj^gL3Re>C(hw!j(1m8n9Hz@zSXO%o{-*jm?u6^@tr+(ylsF>Qjh?6aV{{n>HhBpT!(y@vkHNL%aNrU-K1SZkRrn`4 znBVrGpt8y3ZgaUW-`(W;ZgGA0ef)ap{QB7B@4gH71^JqHJ=M3N9N!R5tou$pSnF#( z!n*IWeXsgqwl&ZE$&exX^)qB_S~3iU&i?8V;5q=bkXob mmL5EOjh<{`=@ypO8;@?_{2eT8F|BwC+t_EfSh_c9jr|8^v8@*X delta 2096 zcma)7O>7%Q6rR~#|E>SCo^1T@C?=_!CXGW1I3z)(ZPH534<5F4*_2?22_cRh){anx zkU#=~IMF^X91v7OAPyj*2+4K+v0o+g=~;g3CUINaL>}R7@hI+jtoM zQ5(GRP_JUw5Ow5)Be;pCkse}m<5-37`iY2j1lwZFPMtY1AB7D^M5;)745p-*kGjSS z2+c^vAK0=ncvgxD`92mcaY=^#LkgFZ~lRl-|rGVnm2by9bq}ia@rNC}5(CM&q zhu?AFF0&Y6q)_r~|~FqcBU!x=NBKx;qx z;Jw(88=-kj2~381@c=A^NStU=x!Yvg&5Rk7<##be9_0+xWLSG@Ff6TPH1!hP1o)3SRH_H~&JA zX!|SwU}`%%vS*sJ>|O1s8NXe5`97?6{rAzFor?$4c^_@VLyi z8jc1Od#` zpoyBKDKwF@rBO{tu~s23qD*q@+wl7sK8jA`3Ai4;)ic2+8T=#~`~VwMynBLma59l@ z$ZpJV=p-cLhuM_*`13dezD%EITV5&Em#W6n*vJ_C6JK!Mf9jiwL&S=6ny(k;-7I{c zSi>_goE*e+@J#ZQ{1Su5SgWnUm&s}T>sC5-NU~jXJ#x+mS~`mjcqe_OsSj2l;0W2N zl*4(_kj~j3gy(#tqLhy?k+L|(Umw4X|A1w77iQT;^hD!*QP}&U;uK(3KL6;KVMS8x z)XrX+zUC`q*F;_|#|met<22SJ>KqnZmp6rGKW&O`RbuKYC{)ggX_Rqq)d$9~y|KSZ zxN=~|&-c6S*eDk-u=g|*V&bLoJUo`k4lZyJDDNcJWgJFBqz2z>lvY-2b)#5ctyXGA z89vBNxi=W=6V__~BG}2CVDiv|tGJhoW^msZ$l&4`qpaI@POMj#H_N3d<2BeBeEY-- v#v?aHBm{Uz@vg*y-KRP7GbUFt`LTQCC!D>8{WpX-K95cA=naXF8%zHW30ZLn diff --git a/routes/__pycache__/matches.cpython-313.pyc b/routes/__pycache__/matches.cpython-313.pyc index 6ee2ed99c3e89bdb0eac6f295a9d877ca787b0fc..16fa6afcf04539a47d9c9b7270e09b9c0f6757a9 100644 GIT binary patch delta 24 ecmbQ&%`~r@iT5)vFBbz46yAu=%G=00u@wMa9|y|- delta 24 ecmbQ&%`~r@iT5)vFBbz4%v=$b<*|`>Vk-b#LI<1x diff --git a/routes/__pycache__/teams.cpython-313.pyc b/routes/__pycache__/teams.cpython-313.pyc index beb6f71a5f61b8bc09499d1035c3870526b2a3b6..a704ba9b81dd415dde01974c1e5724f6678532ca 100644 GIT binary patch delta 502 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 SL5MsyN$2 diff --git a/routes/__pycache__/users.cpython-313.pyc b/routes/__pycache__/users.cpython-313.pyc index e0b6b5c509653470279abfc2d20c2038c5fdaf95..76615e3ec00b6aea873b973a36b081a54e5faeb1 100644 GIT binary patch delta 1252 zcmaJ=Z%kWN6uqTpfWD%urAllXMQ@WsxQ-A5$ndDAh~`29wNSQ!Gs0%^;h>*9^8W*u$WT z!B-3%aBu!;kML0WhFMzZOv-5{Jx8T}fl40Ox!~ih7>+HJ!}ytUtBJ%Kb*VHZl}j>Zc3WjJQs1Uv%b}4)Zio;-GUeU!C|alY;j-daPn7vKK<b@;~uCw`L8rIV4u)2dz79JA}vkP2ZL=c~qfjQ^z3L=-))AAuzI5 zWFW0&u;>(ltbdF1U}?P?=c(4;c^=z9%(O{M=4e;=XlGOzqAytqv0dAs=!_Jq4sO>&mB_}{S`lR}0Ml>8>CQ@21of-_2wg~<|E0zLA`G{)iZrrtGDOw={d@c*80o1v>Ghh$pdEBNdmk;L_c??DxRUUdj#{5C-Z^FaiQF7)mIDnj;Or`}%DDSNk_|w7*xbcP;)m8^~ELP#M#WHZ=-D{=z&6igEZn3hI6<6rEc!2JS zXU(jMW)e#?ELhsXEE9ZcDTF7lJC(1OzOvbyC?XvIoSO3~r&j*Thd$-~?>Q%YteiD` zb}*Fd*&1MSE-Wev;^JmhdH$Dtn`M@=ox9hdd~mOefs1%ltHAbE9_PII#YtzUHCYgI zR?~~7^^RfPY8U=<#(^uVpK+sv#NZ)zlwyte$(j?hYxCTd|6%7*`=J8of2#qLp%J;? z%c<1t+6?Bc4+4iH>kYsuv+FDiZk+$4%OQ4~O5OA(`tOIFDOzos>h7>g`~6yr^+$hT zVm}`L(?6c|1g7^J!3gzR1xECU7CoX4NXEd3HZY<`M>4!mEj_5d)O(xn%lIp2+SKjO z>cLjs-=^|yStozan-TnSd@61TTQyk|_zy*wyMi`lHY2B@xvf$vTVAjAlF~a(F5%w@kH6SLvRb ziM?6Qlko*UE&Hg<@P#yA=t^+D?(;g`w{y~ljt9GN`N7Geb|B9|A4oQ;TWt}#8?BnKNiROxEcEttC zCGIoBZW`|7?H(LDJp6j1MLbPW>O`7L|Llb*%X`7UVIhp$4B;G0%UqKj-U4?^x&dk* RLQm#cv(6o7c7y6FQotg diff --git a/routes/evaluations.py b/routes/evaluations.py index d887fdc..99c5bb2 100644 --- a/routes/evaluations.py +++ b/routes/evaluations.py @@ -69,6 +69,12 @@ def evaluate_player(tryout_id, player_id): return redirect(url_for('main.dashboard')) tryout = Tryout.query.get_or_404(tryout_id) + + # Check if user has permission to evaluate players in this tryout + if not current_user.can_manage_this_tryout(tryout): + flash('You do not have permission to evaluate players in this tryout.', 'danger') + return redirect(url_for('tryouts.list_tryouts')) + player = User.query.get_or_404(player_id) if player.role != 'player': @@ -176,6 +182,12 @@ def players_to_evaluate(tryout_id): return redirect(url_for('main.dashboard')) tryout = Tryout.query.get_or_404(tryout_id) + + # Check if user has permission to evaluate players in this tryout + if not current_user.can_manage_this_tryout(tryout): + flash('You do not have permission to evaluate players in this tryout.', 'danger') + return redirect(url_for('tryouts.list_tryouts')) + registrations = TryoutRegistration.query.filter_by(tryout_id=tryout_id).all() players = [] for reg in registrations: diff --git a/routes/matches.py b/routes/matches.py index 3b8255a..1d1b2c3 100644 --- a/routes/matches.py +++ b/routes/matches.py @@ -45,7 +45,7 @@ def api_events(): """ events = [] - # Get tryouts based on user permissions + # Get tryouts based on user permissions (this already filters by user's role) tryouts = get_visible_tryouts_for_user() for tryout in tryouts: diff --git a/routes/teams.py b/routes/teams.py index 5fdb422..208d2be 100644 --- a/routes/teams.py +++ b/routes/teams.py @@ -238,8 +238,10 @@ def add_team_note(team_id): Response: Redirect to teams list with status message. """ team = OrgTeam.query.get_or_404(team_id) - if current_user.role == 'coach' and team.coach_id != current_user.id: - flash('Only the coach of this team can add notes.', 'danger') + + # Check if user can manage this team (president, manager, or coach) + if not current_user.can_manage_this_org_team(team): + flash('You do not have permission to add notes to this team.', 'danger') return redirect(url_for('teams.list_teams')) content = request.form.get('content', '').strip() @@ -270,10 +272,12 @@ def add_player_note(team_id, player_id): Response: Redirect to teams list with status message. """ team = OrgTeam.query.get_or_404(team_id) - if current_user.role == 'coach' and team.coach_id != current_user.id: - flash('Only the coach of this team can add notes.', 'danger') + + # Check if user can manage this team (president, manager, or coach) + if not current_user.can_manage_this_org_team(team): + flash('You do not have permission to add notes to this team.', 'danger') return redirect(url_for('teams.list_teams')) - + player = User.query.get_or_404(player_id) if player.role != 'player': flash('Can only add notes for players.', 'danger') diff --git a/routes/tryouts.py b/routes/tryouts.py index e650eae..c634332 100644 --- a/routes/tryouts.py +++ b/routes/tryouts.py @@ -175,6 +175,33 @@ def view_tryout(tryout_id): Response: Rendered tryout detail template. """ tryout = Tryout.query.get_or_404(tryout_id) + + # Check if user has permission to view this tryout + can_view = False + if current_user.role == 'president': + can_view = True + elif current_user.role == 'manager' and tryout.created_by == current_user.id: + can_view = True + elif current_user.role == 'coach': + org_team = OrgTeam.query.filter_by(coach_id=current_user.id).first() + if org_team and tryout.target_org_team_id == org_team.id: + can_view = True + elif current_user.role == 'player': + is_registered = TryoutRegistration.query.filter_by( + tryout_id=tryout_id, player_id=current_user.id + ).first() is not None + player_in_match = MatchParticipant.query.join(Match).filter( + MatchParticipant.player_id == current_user.id, + Match.tryout_id == tryout_id + ).first() is not None + can_view = is_registered or player_in_match + elif current_user.role == 'scout': + can_view = True + + if not can_view: + flash('You do not have permission to view this tryout.', 'danger') + return redirect(url_for('tryouts.list_tryouts')) + registrations = TryoutRegistration.query.filter_by(tryout_id=tryout_id).all() registered_players = [User.query.get(r.player_id) for r in registrations if r.player_id] evaluations = Evaluation.query.filter_by(tryout_id=tryout_id).all() diff --git a/routes/users.py b/routes/users.py index 0453ff7..5632dd4 100644 --- a/routes/users.py +++ b/routes/users.py @@ -19,7 +19,7 @@ users_bp = Blueprint('users', __name__, url_prefix='/users') def update_user_gamertags(user, selected_games): """Update gamertags for a user based on form input. - + Handles creating, updating, and deleting gamertag records for the specified games. Used by both edit_user and edit_profile routes to avoid code duplication. @@ -1050,15 +1050,20 @@ def delete_coach_availability(availability_id): @login_required def api_get_coach_availability(coach_id): """API endpoint to get coach availability. - + Args: coach_id: The ID of the coach. - + Returns: Response: JSON with availability data. """ if current_user.role != 'player': return jsonify({'error': 'Unauthorized'}), 403 + + # Players can only view their own coach's availability + org_team = OrgTeam.query.get(current_user.team_id) if current_user.team_id else None + if org_team and org_team.coach_id != coach_id: + return jsonify({'error': 'Unauthorized'}), 403 availability = CoachAvailability.query.filter_by(coach_id=coach_id).all() @@ -1324,24 +1329,29 @@ def add_personal_note(): # Validate context - ensure coach can access the match/tryout/team if match_id: match = Match.query.get(match_id) - match_tryout = None if match: match_tryout = Tryout.query.get(match.tryout_id) - if match_tryout and match_tryout.target_org_team_id and match_tryout.target_org_team_id != org_team.id: - flash('You can only add notes for matches in your team\'s tryouts.', 'danger') - return redirect(url_for('users.add_personal_note')) - if tryout_id and org_team: + # For coaches, verify the match is in their team's tryout + if current_user.role == 'coach' and org_team: + if match_tryout and match_tryout.target_org_team_id and match_tryout.target_org_team_id != org_team.id: + flash('You can only add notes for matches in your team\'s tryouts.', 'danger') + return redirect(url_for('users.add_personal_note')) + if tryout_id: tryout = Tryout.query.get(tryout_id) - if tryout and tryout.target_org_team_id and tryout.target_org_team_id != org_team.id: - flash('You can only add notes for your team\'s tryouts.', 'danger') - return redirect(url_for('users.add_personal_note')) - if team_id and org_team: - team = Team.query.get(team_id) - if team: - tryout = Tryout.query.get(team.tryout_id) + # For coaches, verify the tryout targets their team + if current_user.role == 'coach' and org_team: if tryout and tryout.target_org_team_id and tryout.target_org_team_id != org_team.id: flash('You can only add notes for your team\'s tryouts.', 'danger') return redirect(url_for('users.add_personal_note')) + if team_id: + team = Team.query.get(team_id) + if team: + team_tryout = Tryout.query.get(team.tryout_id) + # For coaches, verify the team is in their tryout + if current_user.role == 'coach' and org_team: + if team_tryout and team_tryout.target_org_team_id and team_tryout.target_org_team_id != org_team.id: + flash('You can only add notes for your team\'s tryouts.', 'danger') + return redirect(url_for('users.add_personal_note')) note = PersonalNote( player_id=player_id,