1 2!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="cfd9f821-60ce-5589-82b0-dee33841ae5c")}catch(e){}}(); 3(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1325],{751:()=>{},18368:(e,t,r)=>{"use strict";r.d(t,{A:()=>I});var a=r(59777);class s extends Error{constructor(e){super(e),this.name="AccessDeniedException",this.errorStatusCode=403}}class n extends Error{constructor(e){super(e),this.name="PageDataParsingException",this.errorStatusCode=500}}var i=r(11164),l=r(24548),c=r.n(l);class o{constructor(e,t){this.accessLevel=null,this.clubId=e,this.request=t}async getAccessLevel(){if(this.accessLevel)return this.accessLevel;let e=await Promise.all([r.e(8513),r.e(4471),r.e(7050)]).then(r.bind(r,7050)),t=await e.default(this.request);return t?this.accessLevel=await this.getAccessLevelFromAPI(t):this.accessLevel="public",this.accessLevel}async canUserAccessPage(e){if("public"===e.accessLevel)return!0;let t=await this.getAccessLevel();return e.accessLevel===t}async getAccessLevelFromAPI(e){try{let t=`v2/club-website/${this.clubId}/access`;c().info("Checking user access via API",{apiUrl:t});let a={Authorization:`Bearer ${e}`},{makeAPIRequest:s}=await Promise.all([r.e(8513),r.e(4471),r.e(981)]).then(r.bind(r,83362)),n=await s(t,{headers:a});if(200!==n.status)return c().error(`User access via API returned with status: ${n.status}`),"public";let i=await n.json();return c().info(`Access level returned by API: ${i.access_level}`),i.access_level||"public"}catch(e){return c().error("Error with user access API check",{error:e}),"public"}}}var u=r(82851),m=r(751),d=r.n(m),p=r(86940),h=r.n(p),g=r(38008);class b{constructor(e,t,r){this.key=e,this.data=t,this.accessLevel=r}}var f=r(99742),y=r(82909).Buffer;let v=r(24548);class A{constructor(e){this.dynamoDbClient=e}getPageData(e,t){return new Promise(f.env.INTEGRATION_TESTING?t=>{try{let r=d().readFileSync(`cypress/cypress/fixtures/page-data/${e.clubId}/${e.stringWithoutClub()}.json`),{key:a,data:s,access_level:n}=JSON.parse(r);v.info("Loaded page data from file"),t(new b(a,s,n))}catch(e){v.error("Error loading page data from file",e),t(null)}}:r=>{let a={TableName:A.tableName(),Key:{page_key:e.toString()}};v.info("Checking DynamoDB for page data",{params:a}),this.dynamoDbClient.get(a,(a,s)=>{a&&("ResourceNotFoundException"!==a.code&&v.error("DynamoDb get Error",a),r(null));let n=(0,u.get)(s,"Item.generated",null);if(n&&t)try{let e=g.c9.fromISO(n),a=g.c9.local().minus({seconds:t});e<a&&(v.info("DynamoDb data was too old. Should fetch from the API instead"),r(null))}catch(e){v.error("Error checking data is new enough",e),r(null)}let i=(0,u.get)(s,"Item.data",null),l=(0,u.get)(s,"Item.dataCompressed",!1),c=(0,u.get)(s,"Item.accessLevel",null);if(i&&c){let t;if(!0===l){if(null===(t=A.decompress(i))){v.info("Decompression failed, treating as cache miss"),r(null);return}}else t=i;r(new b(e,t,c));return}r(null)})})}static decompress(e){try{let t=y.from(e,"base64"),r=h().gunzipSync(t);return JSON.parse(r.toString())}catch(e){return v.error("Error decompressing page data",e),null}}static tableName(){return`page_data_${A.standardizedEnvironment()}`}static standardizedEnvironment(){return"production"}}var w=r(52384);class E{constructor(e,t){this.matchCentreData=e,this.userAccessLevel=t}parseMatchCentreData(){let{key:e,data:t}=this.matchCentreData;return new b(e,{...t,lineup:this.parseLineup(),album:this.parseAlbum()},this.isFullyPublic()?"public":"mixed")}isFullyPublic(){return this.isAlbumPublic()&&this.isLineupPublic()}isAlbumPublic(){let{album:e}=this.matchCentreData.data;return!e||"public"===e.visibility}isLineupPublic(){let{lineup:e}=this.matchCentreData.data;if(!e)return!0;let{profile_visibility:t,selection_visibility:r}=e;return"public"===t&&"public"===r}parseAlbum(){let{album:e}=this.matchCentreData.data;return e?this.canViewAlbum()?{...e,accessDenied:!1}:{accessDenied:!0}:null}parseLineup(){let{lineup:e}=this.matchCentreData.data;if(!e)return e;if(!this.canViewSelection())return{accessDenied:!0};if(this.canViewProfiles())return{...e,accessDenied:!1};let t=e=>Array.isArray(e)?e.map(e=>({...e,avatar:w.A})):e;return{...e,accessDenied:!1,players:t(e.players),substitutes:t(e.substitutes),opponents:t(e.opponents)}}canViewAlbum(){let{album:{visibility:e}}=this.matchCentreData.data;return"public"===e||e===this.userAccessLevel}canViewSelection(){let{lineup:{selection_visibility:e}}=this.matchCentreData.data;return"public"===e||e===this.userAccessLevel}canViewProfiles(){let{lineup:{profile_visibility:e}}=this.matchCentreData.data;return"public"===e||e===this.userAccessLevel}}class P{static getPageData(e,t,r){return(0,i.default)()?P.serverSideGet(e,t,r):P.clientSideGet(e)}static async clientSideGet(e){let t=`/data/club/${e.clubId}/${e.page}?${e.paramsString()}`;c().info("Client side page data API request",{apiUrl:t});let r=await fetch(t,{credentials:"include"});if(200!==r.status)throw new a.A("Error loading page data",r.status,t);let s=await r.json();return new b(e,s.data,s.access_level)}static async serverSideGet(e,t,r){if(!t)throw Error("Server side calls must provide the request object");let a=await P.serverSideLoad(e,t.dynamoDbClient,t.query.preview,r,t),i=new o(e.clubId,t),l=!1;try{l=await i.canUserAccessPage(a)}catch(e){throw c().error("Error checking access control",{error:e}),new s("Error checking access control")}
3if(!l)throw c().info("Access to data denied"),new s("User not authorised to view private page");if("match_centre"!==e.page)return a;let u=await i.getAccessLevel();c().info("Parsing match centre data based on access",{userAccessLevel:u});let m=new E(a,u);try{return m.parseMatchCentreData(a,u)}catch(e){throw c().error("Error Parsing match centre data",{error:e}),new n(e.message)}}static async serverSideLoad(e,t,r,a,s){c().info("Looking up page data",{key:e});try{let r=new A(t),s=await r.getPageData(e,a);if(s)return c().info("Received page data from store",{key:e}),s}catch(e){c().error(`Error retrieving data from store: ${e.message}`)}c().info("Page data not found in store",{key:e});let n=await P.loadFromApi(e,r,s);return c().info("Received page data from API",{key:e}),n}static async loadFromApi(e,t,s){let n=P.apiPath(e,t);c().info("Page data not found in store requesting from API");let{makeAPIRequest:i}=await Promise.all([r.e(8513),r.e(4471),r.e(981)]).then(r.bind(r,83362)),{default:l}=await r.e(2534).then(r.bind(r,72534)),o=await i(n,{headers:l(s)});if(200!==o.status)throw new a.A("Error loading page data",o.status,n);let u=await o.json(),{data:m,access_level:d}=u;if(!m||!d)throw new a.A("Malformed API response",500,n,u);return new b(e,m,d)}static apiPath(e,t){return"true"===t?`v2/club-website/${e.clubId}/page?key=${encodeURIComponent(e.stringWithoutClub())}&preview=${t}`:`v2/club-website/${e.clubId}/page?key=${encodeURIComponent(e.stringWithoutClub())}`}}let I=P},24548:(e,t,r)=>{"use strict";r(99742).env.INTEGRATION_TESTING;e.exports={info:()=>null,error:()=>null}},38596:(e,t,r)=>{"use strict";r.d(t,{A:()=>A});var a=r(14232),s=r(2171),n=r(30842),i=r(74055),l=r(93052),c=r(35027),o=r(27013),u=r(97455),m=r(34917),d=r(55112),p=r(56846),h=r(42520),g=r(74854);let b=({applyForMembership:e,clubId:t,hasLoaded:r,isLoading:s,isSubmitting:n,loadNetworkPanelData:i,memberId:o,pendingApplication:u})=>((0,a.useEffect)(()=>{s||r||i(t)},[]),s)?a.createElement(a.Fragment,null,a.createElement(g.A,{isLoading:!0}),a.createElement(c.A,{preset:"body--small",color:"dustygrey"},a.createElement(m.x6,{i18nKey:"common:checking_access"},"Checking access"))):u?a.createElement(a.Fragment,null,a.createElement(l.A,{right:"xsmall"},a.createElement(c.A,{preset:"body--small",color:"dustygrey"},a.createElement(m.x6,{i18nKey:"common:pending_membership_application"},"Your membership application is pending."))),a.createElement(h.A,{route:"account.membership.roles",params:{memberId:o}},a.createElement("a",null,a.createElement(c.A,{preset:"body--small",color:"primary"},a.createElement(m.x6,{i18nKey:"common:manage_roles"},"Manage your roles"))))):a.createElement(a.Fragment,null,a.createElement(g.A,{isLoading:n}),a.createElement(d.A,{theme:"primary",onClick:()=>e(t,o),disabled:n},a.createElement(m.x6,{i18nKey:"common:apply_for_membership_label"},"Apply for membership")));b.defaultProps={memberId:null};let f=(0,s.Ng)((e,{clubId:t})=>({hasLoaded:(0,u.q$)(e),isLoading:(0,u.Du)(e),isSubmitting:(0,u.p)(e),memberId:(0,u.EJ)(e,t),pendingApplication:(0,u.fc)(e,t)}),{loadNetworkPanelData:p.hx,applyForMembership:p.KH})(b);var y=r(43918);let v=({authorised:e,clubId:t,loggedIn:r,loginTranslationKey:s,messageTranslationKey:o,noHeading:u,onAuthorise:d})=>((0,a.useEffect)(()=>{e&&d()},[e]),e)?null:a.createElement(n.A,{component:"div",maxWidth:400,center:!0},a.createElement(i.A,{all:"medium",style:{textAlign:"center"},component:"div"},!u&&a.createElement(l.A,{bottom:"medium",component:"div"},a.createElement(c.A,{preset:"subtitle--large",color:"dustygrey"},a.createElement(m.x6,{i18nKey:o},"Access denied"))),r?a.createElement(f,{clubId:t}):a.createElement(y.A,{translationKey:s})));v.defaultProps={loginTranslationKey:"common:login",messageTranslationKey:"common:access_denied",noHeading:!1,onAuthorise:()=>{}};let A=(0,s.Ng)((e,t)=>({authorised:(0,u.$Q)(e,t.clubId),loggedIn:(0,o.M3)(e)}))(v)},43918:(e,t,r)=>{"use strict";r.d(t,{A:()=>u});var a=r(14232),s=r(2171),n=r(55112),i=r(872),l=r(34917);function c(){return(c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)({}).hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e}).apply(null,arguments)}let o=({openPanel:e,translationKey:t,...r})=>a.createElement(n.A,c({theme:"primary",onClick:e},r),a.createElement(l.x6,{i18nKey:t},"Login"));o.defaultProps={translationKey:"common:login"};let u=(0,s.Ng)(null,{openPanel:i.YZ})(o)},50022:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(82851);class s{constructor(e,t,r={}){this.clubId=e,this.page=t,this.params=r}paramsString(){return(0,a.map)((0,a.pickBy)(this.params,a.identity),(e,t)=>`${t}=${e}`).join("&")}stringWithoutClub(){return(0,a.filter)([this.page,this.paramsString()]).join(":")}toString(){return(0,a.filter)([`club${this.clubId}`,this.page,this.paramsString()]).join(":")}}let n=s},82868:(e,t,r)=>{"use strict";r.d(t,{A:()=>h});var a=r(14232),s=r(2171),n=r(49998),i=r.n(n),l=r(77328),c=r.n(l),o=r(34917);r(70470);var u=r(79722),m=r(95435);let d=({club:e,route:t,params:r})=>{try{let s=(0,m.A)(e,t,r);return a.createElement("link",{rel:"canonical",href:s})}catch(e){return null}};d.defaultProps={params:{}};let p=({club:e,description:t,descriptionTranslationKey:r,route:s,routeParam
3s:n,titleTranslationKey:l,translationValues:o,t:u,title:m})=>{let p={...o,clubName:e.name},h=m||u(l,p),g="";return t&&(g=i()(t)),r&&(g=u(r,{...o,clubName:e.name})),a.createElement(c(),null,a.createElement("title",{key:"title"},h),g.length>1&&a.createElement("meta",{name:"description",content:g.length>160?g.substring(0,160):g,key:"metaDescription"}),a.createElement(d,{club:e,route:s,params:n}))};p.defaultProps={description:null,descriptionTranslationKey:null,routeParams:{},title:null,titleTranslationKey:null,translationValues:{}};let h=(0,o.CI)(["common","information","media","news","shop","teams"])((0,s.Ng)((e,{club:t})=>({club:t||(0,u.qU)(e)}))(p))},84593:()=>{}}]); 4//# debugId=cfd9f821-60ce-5589-82b0-dee33841ae5c
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.