PageSourceSearch

https://docs-pactflow-preview.netlify.app/assets/js/4eb54b16.cbb6e422.js

js docs-pactflow-preview.netlify.app collected 2026-10-03 10:41:12 UTC 10,959 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkpartners=self.webpackChunkpartners||[]).push([[15870],{15680:(e,a,t)=>{t.d(a,{xA:()=>m,yg:()=>g});var n=t(96540);function r(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function i(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var a=1;a<arguments.length;a++){var t=null!=arguments[a]?arguments[a]:{};a%2?i(Object(t),!0).forEach((function(a){r(e,a,t[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(t,a))}))}return e}function s(e,a){if(null==e)return{};var t,n,r=function(e,a){if(null==e)return{};var t,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)t=i[n],a.indexOf(t)>=0||(r[t]=e[t]);return r}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)t=i[n],a.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=n.createContext({}),p=function(e){var a=n.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):o(o({},a),e)),t},m=function(e){var a=p(e.components);return n.createElement(l.Provider,{value:a},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var t=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=p(t),u=r,g=c["".concat(l,".").concat(u)]||c[u]||d[u]||i;return t?n.createElement(g,o(o({ref:a},m),{},{components:t})):n.createElement(g,o({ref:a},m))}));function g(e,a){var t=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=u;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[c]="string"==typeof e?e:r,o[1]=s;for(var p=2;p<i;p++)o[p]=t[p];return n.createElement.apply(null,o)}return n.createElement.apply(null,t)}u.displayName="MDXCreateElement"},21640:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var n=t(58168),r=(t(96540),t(15680));const i={title:"1.11.0"},o=void 0,s={unversionedId:"docs/on-premises-2x/releases/1.11.0",id:"docs/on-premises-2x/releases/1.11.0",title:"1.11.0",description:"Release date",source:"@site/docs/docs/on-premises-2x/releases/1.11.0.md",sourceDirName:"docs/on-premises-2x/releases",slug:"/docs/on-premises-2x/releases/1.11.0",permalink:"/docs/on-premises-2x/releases/1.11.0",draft:!1,editUrl:"https://github.com/pactflow/docs.pactflow.io/edit/master/website/docs/docs/on-premises-2x/releases/1.11.0.md",tags:[],version:"current",lastUpdatedBy:"Matt Fellows",lastUpdatedAt:1751508618,formattedLastUpdatedAt:"Jul 3, 2025",frontMatter:{title:"1.11.0"}},l={},p=[{value:"Release date",id:"release-date",level:2},{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Migration notes",id:"migration-notes",level:2}],m={toc:p},c="wrapper";function d(e){let{components:a,...t}=e;return(0,r.yg)(c,(0,n.A)({},m,t,{components:a,mdxType:"MDXLayout"}),(0,r.yg)("h2",{id:"release-date"},"Release date"),(0,r.yg)("p",null,"5 July 2021"),(0,r.yg)("h2",{id:"features"},"Features"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Allow a banner to be configured and displayed post-login."),(0,r.yg)("li",{parentName:"ul"},"Support ",(0,r.yg)("a",{parentName:"li",href:"/docs/user-interface/settings/preferences#personal-preferences"},"user preferences"),"."),(0,r.yg)("li",{parentName:"ul"},"Support ",(0,r.yg)("a",{parentName:"li",href:"/docs/user-interface/settings/preferences#system-preferences"},"system preferences"),"."),(0,r.yg)("li",{parentName:"ul"},"Support ",(0,r.yg)("a",{parentName:"li",href:"/docs/on-premises-2x/environment-variables#pactflow_database_port"},"PACTFLOW_DATABASE_PORT")," environment variable."),(0,r.yg)("li",{parentName:"ul"},"Allow API token expiry to be configured."),(0,r.yg)("li",{parentName:"ul"},"Show warning in UI when API token is due to expire."),(0,r.yg)("li",{parentName:"ul"},"Support database field level encryption of API tokens."),(0,r.yg)("li",{parentName:"ul"},"Support ",(0,r.yg)("a",{parentName:"li",href:"https://docs.pact.io/pact_broker/client_cli/readme#can-i-deploy"},"ignoring specified applications")," when using can-i-deploy."),(0,r.yg)("li",{parentName:"ul"},"Allow ",(0,r.yg)("a",{parentName:"li",href:"/docs/user-interface/settings/secrets"},"secrets")," and ",(0,r.yg)("a",{parentName:"li",href:"/docs/user-interface/settings/webhooks"},"webhooks")," to be assigned to, and managed by, a specific team."),(0,r.yg)("li",{parentName:"ul"},"Improve ",(0,r.yg)("a",{parentName:"li",href:"https://github.com/pact-foundation/pact_broker/pull/432"},"pending pacts and WIP pacts")," logic."),(0,r.yg)("li",{parentName:"ul"},"Add ",(0,r.yg)("a",{parentName:"li",href:"/docs/user-interface/settings/webhooks#pactflow"},"pactbroker.azureDevOpsVerificationStatus webhook parameter"),"."),(0,r.yg)("li",{parentName:"ul"},"Validate that well formed JSON or YAML is used when publishing Base64 encoded provider contracts."),(0,r.yg)("li",{parentName:"ul"},"Disallow the deletion of predefined roles."),(0,r.yg)("li",{parentName:"ul"},"Add endpoint to ",(0,r.yg)("a",{parentName:"li",href:"/docs/permissions/predefined-roles#resetting-permissions-for-predefined-roles"},"reset role/permissions assignments")," for predefined roles."),(0,r.yg)("li",{parentName:"ul"},"Deprecate ",(0,r.yg)("inlineCode",{parentName:"li"},"system:preference:read")," permission. All logged in users may now read the system preferences."),(0,r.yg)("li",{parentName:"ul"},"Allow team administrators to be assigned to teams. Team administrators can add and remove users and applications from teams."),(0,r.yg)("li",{parentName:"ul"},"Add ",(0,r.yg)("a",{parentName:"li",href:"/docs/permissions#system_accountmanageteam"},(0,r.yg)("inlineCode",{parentName:"a"},"system_account:manage:team"))," permission to allow team users to view/regenerate the API tokens for system account users that are assigned to their team."),(0,r.yg)("li",{parentName:"ul"},"Update default permissions assigned to predefined roles to use ",(0,r.yg)("a",{parentName:"li",href:"/docs/permissions/predefined-roles#user"},"team scoped permissions")," where ever applicable."),(0,r.yg)("li",{parentName:"ul"},'Renamed "Test Maintainer" role to ',(0,r.yg)("a",{parentName:"li",href:"/docs/permissions/predefined-roles#user"},'"User"')," for new installations.")),(0,r.yg)("h2",{id:"fixes"},"Fixes"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Ensure the SAML provider base URL is derived correctly when the login endpoint is specified in the metadata, not an environment variable"),(0,r.yg)("li",{parentName:"ul"},"Correctly record which SAML provider was used to log in when multiple SAML providers are configured"),(0,r.yg)("li",{parentName:"ul"},"Ensure api token values are not show in debug logging")),(0,r.yg)("h2",{id:"migration-notes"},"Migration notes"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"If not already set, the ",(0,r.yg)("inlineCode",{parentName:"p"},"PACTFLOW_BASE_URL")," should be set to mitigate cache poisoning vulnerabilities.")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"The ",(0,r.yg)("inlineCode",{parentName:"p"},"PACTFLOW_MASTER_SECRETS_ENCRYPTION_KEY")," environment variable has been renamed to ",(0,r.yg)("inlineCode",{parentName:"p"},"PACTFLOW_MASTER_ENCRYPTION_KEY"),". The old name will continue to work, but please update your configuration to avoid warnings. Do not change the value of this key.")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"Steps to enable API token database field level encryption:"),(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"Please read the relevant documentation for each of the following environment variables, and update your configuration with the appropriate values."),(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/docs/on-premises-2x/environment-variables#pactflow_master_encryption_key"},(0,r.yg)("inlineCode",{parentName:"a"},"PACTFLOW_MASTER_ENCRYPTION_KEY"))," - renamed from ",(0,r.yg)("inlineCode",{parentName:"li"},"PACTFLOW_MASTER_SECRETS_ENCRYPTION_KEY"),". Do not change the value of this key."),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/docs/on-premises-2x/environment-variables#pactflow_api_token_encryption_enabled"},(0,r.yg)("inlineCode",{parentName:"a"},"PACTFLOW_API_TOKEN_ENCRYPTION_ENABLED")),' - must be set to "true"'),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"/docs/on-premises-2x/environment-variables#pactflow_api_token_iv"},(0,r.yg)("inlineCode",{parentName:"a"},"PACTFLOW_API_TOKEN_IV"))," - a random value must be assigned as per the documentation."))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"Restart the PactFlow application. The API tokens will be encrypted during start up once the ",(0,r.yg)("inlineCode",{parentName:"p"},"PACTFLOW_API_TOKEN_ENCRYPTION_ENABLED")," environment variable has been set to true.")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"Verify that the API tokens have been encrypted by running the SQL:"),(0,r.yg)("pre",{parentName:"li"},(0,r.yg)("code",{parentName:"pre",className:"language-sql"},"SELECT COUNT(*) FROM saas_api_tokens;\nSELECT COUNT(*) FROM saas_api_tokens WHERE encrypted_value IS NOT NULL;\n")),(0,r.yg)("p",{parentName:"li"},"Both counts should be the same.")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"Verify that users still have access to the API using their existing tokens executing the following curl command, or making the same request with Postman or equivalent:"),(0,r.yg)("pre",{parentName:"li"},(0,r.yg)("code",{parentName:"pre",className:"language-bash"},'curl -v https://{YOUR_PACTFLOW_DOMAIN} \\\n  -H "Authorization: Bearer {EXISTING_TOKEN_VALUE}"\n')),(0,r.yg)("p",{parentName:"li"},"The response should be a 200 OK with a JSON body.")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"Once it has been confirmed that the now-encrypted API tokens are working correctly, please clear the unencrypted values from the database using the following SQL:"),(0,r.yg)("pre",{parentName:"li"},(0,r.yg)("code",{parentName:"pre",className:"language-sql"}
1,"UPDATE saas_api_tokens SET value = NULL;\n"))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"Once API token encryption has been enabled and the unencrypted values removed, encryption cannot be disabled again."))))))}d.isMDXComponent=!0}}]);

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.