<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://communitytest.tessitura.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Developers Tessitura Community</title><link>https://communitytest.tessitura.com/topical_groups/developers/</link><description>Software developers gather here. This group hosts developers and interested parties from Tessitura Network members, partner vendors and Network staff.</description><dc:language>en-US</dc:language><generator>Telligent Community 12 Non-Production</generator><item><title>Wiki Page: Community Developer Documentation</title><link>https://communitytest.tessitura.com/topical_groups/developers/w/community-developer-documentation</link><pubDate>Tue, 14 Oct 2025 19:53:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:0df77497-ef81-4954-8d09-7486fbfc1ef5</guid><dc:creator>Todd Lantry (he/him)</dc:creator><description>Use this space to write and share documentation on Tessitura functionality that doesn&amp;#39;t already exist, but you would have found useful for one of your own projects. In Slack , you can summon a link to this page with the command !wiki . ...</description></item><item><title>Situation's Developer Summit for Tessitura members</title><link>https://www.eventbrite.com/e/tessitura-community-developer-summit-tickets-824198278237</link><pubDate>Fri, 03 May 2024 13:00:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:fae89c29-7ab8-4450-8513-fac5a86d0b10</guid><dc:creator>Cyrus Collier</dc:creator><description>Learning through Collaboration and Connection Join us for an all-day, in-person event exclusively for developers in the Tessitura community! Whether you are an engineer working with the Tessitura API or are a Tessitura database SQL expert, this event will level-up your Tessitura platform wrangling skills. The day will feature presentations and workshops facilitated by fellow developers, plus small group breakout sessions where developers can have in-depth discussions, get assistance with active projects and contribute to documentation and other knowledge-sharing initiatives.</description><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/Developer_2D00_Community">Developer-Community</category></item><item><title>Use AI / Machine Learning to improve Best Seating to be more customer centric</title><link>https://communitytest.tessitura.com/topical_groups/developers/i/ideas/use-ai-machine-learning-to-improve-best-seating-to-be-more-customer-centric</link><pubDate>Fri, 12 Apr 2024 09:14:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:0ae6bf91-c367-4302-8ee8-fbac260ac90d</guid><dc:creator>Simon Davidson</dc:creator><description>Currently Best Seating picks seats based on the best seat map, however I think it would be interesting to explore a more customer centric best seating solution. Would it be possible to train a model so that best seating can pick the best seats for a customer, potentially based on their past attendances, the type of show they are booking, as well as the availability.</description></item><item><title>Wiki: Community Docs Wiki</title><link>https://communitytest.tessitura.com/topical_groups/developers/w/community-developer-documentation</link><pubDate>Thu, 11 Apr 2024 19:40:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:c3577af2-e7f0-4a1e-a18e-e409215723bd</guid><dc:creator /><description>Wiki for creating community documentation.</description></item><item><title>Wiki Page: The Secret Life of HTML Templates</title><link>https://communitytest.tessitura.com/topical_groups/developers/w/community-developer-documentation/790/the-secret-life-of-html-templates</link><pubDate>Thu, 11 Apr 2024 18:45:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:6aa35c30-07ae-4c3a-b10f-0acfb6040cab</guid><dc:creator>Nick Reilingh</dc:creator><description>or: How I Learned to Stop Worrying and Just Write HTML Templates or: HTML Templates: The Missing Manual or: The HTML Templates documentation they don&amp;#39;t want you to know about! This article aims to explain the differences between the Razor template syntax used in Tessitura HTML Templates and the syntax that you might see used in training courses for Razor Pages in ASP.NET Core/MVC web applications. At present, the Tessitura documentation only scratches the surface of what is available syntactically, and doesn&amp;#39;t really attempt to explain how HTML Templates are implemented. Tessitura v15.1 v16 Razor ASP.NET MVC 3? ? C# 5.0 6.0? RazorEngine 3.10 ? The Big Secret HTML Templates are rendered using an Apache-licensed, open-source project called RazorEngine , which is available on GitHub . To summarize the RazorEngine documentation , RazorEngine is a framework which consumes the Razor parser -- as is ASP.NET MVC. There is a difference between Razor&amp;#39;s syntax and special features provided by these frameworks. RazorEngine only shares its syntax with other implementations like ASP.NET MVC. This is why convenience methods like @Html.Raw() (often seen in web results about Razor Pages) do not work in HTML templates -- the @Html helper is a class specifically implemented by the ASP.NET MVC framework. (RazorEngine instead has @Raw() built-in to provide the same functionality .) Reading the RazorEngine documentation can be informative. Tessitura appears to implement version 3.10 of RazorEngine. The fundamentals of how Razor operates still apply. The Razor syntax parser converts a .cshtml template into a C# Execute() method on a generated class, which, when invoked, has access to the provided model and returns a string. Assorted Syntactic Tips and Tricks The version of C# available in Tessitura HTML Templates in Tessitura V15.1 is C# 5.0. In Tessitura V16, Razor templates will support C# 9.0, giving them support for interpolated strings (C# 6.0), local functions (C# 7.0), and other features. The version of Razor available in Tessitura HTML Templates in V15.1 is &amp;quot;Razor 3&amp;quot;, which is versioned as such because it shipped with ASP.NET MVC 3. This means technically, the syntax documentation linked in the Tessitura docs is WAY too new for what is actually in use. This explains why &amp;quot;templating methods&amp;quot; described in these docs are not functional in Tessitura HTML Templates. Razor supports the use of a @functions directive , which gives you a space to define additional members (methods and properties) to be added to the generated class. Curiously, the HTML Templates editor does not syntax-color code inside of a @functions directive. @functions { private string SOME_URL_CONSTANT = &amp;quot;https://example.com&amp;quot;; private string LinkTag(string link) { return &amp;quot; &amp;quot; + link + &amp;quot; &amp;quot;; } } @Raw(LinkTag(&amp;quot;some text&amp;quot;)) @* Outputs: some text *@ Methods are private because the template&amp;#39;s execution is just another method in the same class. The version of Razor used in RazorEngine 3.10 (Razor 3, shipped in ASP.NET MVC 3) also supports the @helper directive, which allows you to define a kind of function that contains markup, just like the rest of the template. This allows for easy reuse of template code. Helpers were removed in Razor 4 , reappear in ASP.NET MVC 5 , were removed again in ASP.NET Core , and finally code blocks were enhanced to allow for inline markup in functions , without the need for the @helper directive. Helpers can be used as &amp;quot;templating methods&amp;quot; which are otherwise unavailable as described above. @helper BoldMe(string content) { @content } @BoldMe(&amp;quot;look at me, I&amp;#39;m bold!&amp;quot;) @* Outputs: look at me, I&amp;#39;m bold! *@ The output of the helper correctly writes literal or encoded HTML like the rest of the template does. A regular function can be made to behave like a templating method by defining it with a void type and then calling the imperative WriteLiteral() and Write() functions, which is basically what a Razor template compiles to in the first place. Then this function can be called inside a code block ( @{} ) to inject its output at that location. @functions { private void DIYRenderFunction(string content) { WriteLiteral(&amp;quot; &amp;quot;); Write(content); WriteLiteral(&amp;quot; &amp;quot;); } } @{ DIYRenderFunction(&amp;quot;here are my paragraph tags &amp;amp; encoded content&amp;quot;); } @* Outputs: here are my paragraph tags &amp;amp; encoded content *@ Helpers can be passed into one another as arguments if your types are correct. The defined helper token refers to a method which returns a RazorEngine.Templating.TemplateWriter type , which is what writes template content as Literal or HTML-encoded inline. This type has a .ToString() method which can be used to cast to a string type at the point of use, but this is often non-optimal because if the helper template outputs HTML (which it often will), you will need to @Raw() the result when using it in another helper template. Luckily, C# supports the dynamic keyword in a type signature, which means you can pass in either a TemplateWriter or a raw string and RazorEngine will do the right thing at runtime: @helper ItalicizeMe(dynamic content) { @content } @helper BoldMe(dynamic content) { @content } @ItalicizeMe(BoldMe(&amp;quot;I&amp;#39;m bold, AND italic!&amp;quot;)) @ItalicizeMe(&amp;quot;I&amp;#39;m only italic!&amp;quot;) @* Outputs: I&amp;#39;m bold, AND italic! I&amp;#39;m only italic! *@ You can also compose helpers by nesting them inside each other&amp;#39;s templates, since helpers and @functions directives share the same scope (the generated class). In contrast, variables declared in a code block are local to the render method, so while they can be referenced in the template itself, they cannot be referenced in other class methods like helpers and functions. A special syntax exists in Razor 3 for raw text. This is necessary when using helpers without surrounding tags. Information here: ASP.NET MVC 3: Razor’s @: and syntax Now, with all of these tools in our toolbox, only one question remains... Can we avoid writing inline styles?</description><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/c_2300_">c#</category><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/HTML%2bTemplates">HTML Templates</category><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/razor">razor</category></item><item><title /><link>https://communitytest.tessitura.com/topical_groups/developers/m/files/57859?CommentId=d844e1a8-7bc0-4e67-a9f7-8be66db6f97c</link><pubDate>Mon, 08 Apr 2024 21:03:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:d844e1a8-7bc0-4e67-a9f7-8be66db6f97c</guid><dc:creator>Andrea Crain</dc:creator><description>Thank you Chris!</description></item><item><title /><link>https://communitytest.tessitura.com/topical_groups/developers/m/files/57859?CommentId=8597caac-9ad2-493c-aba4-742827d2ae19</link><pubDate>Mon, 08 Apr 2024 14:05:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:8597caac-9ad2-493c-aba4-742827d2ae19</guid><dc:creator>Gill Tasker (she/her)</dc:creator><description>Thanks very much for presenting and uploading this Chris Hipschen !</description></item><item><title>File: Tessitura CoreApplication Development and Release Process - presentation recording</title><link>https://communitytest.tessitura.com/topical_groups/developers/m/files/57859</link><pubDate>Fri, 05 Apr 2024 19:57:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:2c939cd3-2a61-4927-9811-a5d35ba673c4</guid><dc:creator>Chris Hipschen</dc:creator><description>Presenter: Chris Hipschen (Director, Software Engineering Quality and Infrastructure) Topic: Tessitura Core Application Software Development Lifecycle Description: An overview of the Tessitura core application value stream mapping, described as the process to release new functionality or a defect resolution</description></item><item><title>Developers Community Meetup (Tessitura Guest Speaker!)</title><link>https://communitytest.tessitura.com/topical_groups/developers/c/e/1570</link><pubDate>Fri, 05 Apr 2024 15:30:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:07124529-1fe1-400c-a32b-8108d37e9695</guid><dc:creator>Shelly  Xiong (they/she)</dc:creator><description>Join us for our next Developers Tessitura Community meetup! Our guest speaker will go over the development lifecycle followed by some Q&amp;amp;A. Presenter: Chris Hipschen (Director, Software Engineering Quality and Infrastructure) Topic: Tessitura Core Application Software Development Lifecycle Description: An overview of the Tessitura core application value stream mapping, described as the process to release new functionality or a defect resolution. The presentation and Q&amp;amp;A will be in the first 30 mins but feel free to stay and chat afterwards and to join us in whatever way you feel most comfortable, whether with your camera on or off and through chat only. Best regards, Shelly, Chris, and Marcus Join on your computer, mobile app or room device Click here to join the meeting Meeting ID: 256 156 570 246 Passcode: uBv4X5 Download Teams | Join on the web Or call in (audio only) +1 631-388-7359,,565901280# United States, Brentwood Phone Conference ID: 565 901 280# Find a local number | Reset PIN Learn More | Meeting options</description><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/developer">developer</category><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/Developer_2D00_Community">Developer-Community</category></item><item><title>Forum Post: Developer Meeting and Sessions Submissions Reminder</title><link>https://communitytest.tessitura.com/topical_groups/developers/f/developer-discussion/35576/developer-meeting-and-sessions-submissions-reminder</link><pubDate>Wed, 03 Apr 2024 16:37:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:80d0ea8b-2369-446c-be8d-3fd605b8bbc0</guid><dc:creator>Shelly  Xiong (they/she)</dc:creator><description>Hi everyone, Reminder! This meeting is happening Friday! You are invited to our next meeting on 5 Apr 2024, 10:30 AM - 11:15 AM Central Time (US &amp;amp; Canada). Register For The Event Join us for our next Developers Tessitura Community meetup! Our guest speaker will go over the development lifecycle followed by some Q&amp;amp;A. Presenter: Chris Hipschen (Director, Software Engineering Quality and Infrastructure) Topic: Tessitura Core Application Software Development Lifecycle Description: An overview of the Tessitura core application value stream mapping, described as the process to release new functionality or a defect resolution. The presentation and Q&amp;amp;A will be in the first 30 mins but feel free to stay and chat afterwards and to join us in whatever way you feel most comfortable, whether with your camera on or off and through chat only. Submit a presentation proposal for TLCC Washington, D.C. There is still time to submit a presentation proposal for TLCC Washington, D.C. Do you wonder what topics you might present this August? Anything you are doing with Tessitura to make your day-to-day and season-to-season life easier is guaranteed to interest others. Nothing is too small or too grand to propose. Below is a list of topics to inspire your session proposal. If any of these sound familiar, then we’d love to hear from you. And if you have an idea that’s not on this list, we&amp;#39;re happy to hear that as well! How... Your education or finance department uses Tessitura You&amp;#39;ve transitioned activities and roles to Tessitura v16 Your website provides self-service opportunities Your group sales process was made more efficient What... Integrations you&amp;#39;ve built with your Tessitura system HTML templates you&amp;#39;ve customized Customer journeys you&amp;#39;ve created for your organization Dashboards you&amp;#39;ve built using the Interactions cube Successful strategies you&amp;#39;ve used to combat fraud and/or chargebacks Proposals may include one to two presenters, either from the same organization or from different organizations. Presenters and panelists selected for community-led sessions will receive a 25% discount on conference registration. We’re actively seeking speakers who identify as Black, Indigenous, Latinx, or a person of color; gender-nonconforming or LGBTQIA+; having a disability; neurodivergent; and other historically excluded identities. Session submissions are due by Wednesday, April 10 at 11:59pm PDT. Selected presenters will be notified by Friday, May 15. Submit Your Idea</description><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/developer">developer</category><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/devops">devops</category><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/tlcc">tlcc</category><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/developer%2bmeetup">developer meetup</category></item><item><title>Forum Post: Next Developers Community Meetup (Tessitura Guest Speaker!)</title><link>https://communitytest.tessitura.com/topical_groups/developers/f/developer-discussion/35462/next-developers-community-meetup-tessitura-guest-speaker</link><pubDate>Thu, 21 Mar 2024 19:53:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:4ebdff86-0eda-49a9-9160-d635991d0eff</guid><dc:creator>Shelly  Xiong (they/she)</dc:creator><description>You are invited to our next meeting on 5 Apr 2024, 10:30 AM - 11:30 AM Central Time (US &amp;amp; Canada). Register For The Event Join us for our next Developers Tessitura Community meetup! Our guest speaker will go over the development lifecycle followed by some Q&amp;amp;A. Presenter: Chris Hipschen (Director, Software Engineering Quality and Infrastructure) Topic: Tessitura Core Application Software Development Lifecycle Description: An overview of the Tessitura core application value stream mapping, described as the process to release new functionality or a defect resolution. So please feel free to join us in whatever way you feel most comfortable, whether with your camera on or off and through chat only. Best regards, Shelly, Chris, and Marcus</description><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/developer">developer</category><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/developer%2bmeetup">developer meetup</category></item><item><title>Forum Post: TLCC Washington, D.C - Developer Track - Call for Presenters</title><link>https://communitytest.tessitura.com/topical_groups/developers/f/developer-discussion/35411/tlcc-washington-d-c---developer-track---call-for-presenters</link><pubDate>Mon, 18 Mar 2024 20:39:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:2a65fa23-6eac-4030-8ee4-617a3f86a459</guid><dc:creator>Julie Rosenthal</dc:creator><description>Hello, Developers! The call for presenters for TLCC Washington, D.C. is now officially open! We invite everyone to submit presentation proposals, no matter your experience with Tessitura. Presenters will receive a 25% discount on the conference registration fee, and support will be available to help you in preparing your presentation. TLCC Washington, D.C. will once again feature a Developer Track. When submitting a presentation proposal for the Developer Track, please select either IT and Software Development or Digital and Web as the primary interest area. Session proposals are due by Wednesday, April 10th. Learn more and submit your ideas .</description></item><item><title>Wiki Page: Browser-based custom screen auth token API authentication</title><link>https://communitytest.tessitura.com/topical_groups/developers/w/community-developer-documentation/813/browser-based-custom-screen-auth-token-api-authentication</link><pubDate>Thu, 07 Mar 2024 17:11:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:5cd0acf0-1403-4323-b451-22deaf94c67e</guid><dc:creator>Nick Reilingh</dc:creator><description>Per the Tessitura Custom Screens (v15.0+) documentation, browser-based custom screens can be requested with an &amp;gt; token passed as a URL parameter. This token represents the Tessitura Client&amp;#39;s currently logged-in user&amp;#39;s application session, and can be used to authenticate API requests with the user&amp;#39;s security context. This style of session token authentication is far preferable to the alternative, where the web application providing the browser-based custom screen must authenticate to the API as itself, be granted access to a maximum resource scope, and implement resource security on behalf of the API services based on the current user&amp;#39;s usergroup. To do this securely, the web application must also request the user to log into itself, inside of a custom tab inside a Tessitura client app session that the user has already authenticated to. This complicates security implementation and the double-login requirement makes for bad UX. To make use of this method of authentication, the custom web application can be largely if not entirely stateless. The only tradeoff is that API resource permissions must be granted to the Tessitura User Groups that the users operate under. In the case of custom tabs/screens, it would be advisable to bundle appropriate API permissions with access to the custom screen security object itself. The authentication flow looks something like this: TR_CUSTOM_TAB is configured with an entry for https://your.app/?token= &amp;gt;, and usergroups are granted permission to this custom tab and to any API Resources that will need to be accessed (logging in as an Admin group circumvents this requirement and can be useful for testing). User opens the custom tab. Custom web app receives a GET request from the embedded browser containing the auth token in the URL. Web app must parse URL parameters obtaining the token value, decoding any URL %-encoding which is likely to occur in the auth token parameter. Most libraries and frameworks will do this automatically. Web app can now make a request to the Tessitura API. Instead of using traditional basic auth (Username:Usergroup:Location:Password), the request can simply provide a token authorization header as follows: Authorization: Token . Depending on the specific needs of the web app, it is likely advisable for the token to be returned back to the frontend as a session cookie, since the URL parameter provided by Tessitura is only guaranteed when the custom screen is loaded for the first time (or reloaded). Any navigations the user does from within the custom screen (e.g. by clicking an tag) will navigate to whatever href has been provided by the web app. An app developer may opt to provide the auth token in all such hrefs instead of using the session cookie approach, but this is up to personal taste.</description><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/Authentication">Authentication</category><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/authorization">authorization</category><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/custom%2bscreens">custom screens</category><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/REST%2bAPI">REST API</category></item><item><title>Ability to Sort columns in Contributions</title><link>https://communitytest.tessitura.com/topical_groups/developers/i/ideas/ability-to-sort-columns-in-contributions</link><pubDate>Thu, 07 Mar 2024 06:48:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:48e889fa-a5c8-4f6b-baf3-1200904e354e</guid><dc:creator>Miki Masuda</dc:creator><description /><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/Tessitura%2bv16">Tessitura v16</category></item><item><title>Forum Post: Pricing Rule Message Only Image Size</title><link>https://communitytest.tessitura.com/topical_groups/developers/f/developer-discussion/35242/pricing-rule-message-only-image-size</link><pubDate>Wed, 28 Feb 2024 23:00:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:e4a4e11a-30cc-474a-adf6-91dd767013ac</guid><dc:creator>Jane Trembley</dc:creator><description>Has anyone had any luck changing the image size for message only pricing rules? Is this something based on your TNEW site templates? We are stuck with a rectangle that looks awful on mobile. Additional question - has anyone been able to have different image sizes based on mobile or desktop purchase path? For us, we cannot differentiate.</description><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/tnew">tnew</category><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/pricing%2brule">pricing rule</category></item><item><title>Automated Suppression List Sweep</title><link>https://communitytest.tessitura.com/topical_groups/developers/i/ideas/automated-suppression-list-sweep</link><pubDate>Mon, 12 Feb 2024 12:06:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:228450ea-dd51-4db9-a24a-dac0f85ed1fe</guid><dc:creator>Shona Galletly</dc:creator><description>We&amp;#39;re having issues with email addresses landing up on a Tessitura suppression list which does of course mean that reports are being blocked and we receive calls/emails chasing the information. We understand that it is connected to the ferocity of the Leeds City Council firewall(!) and the random setting changes to ensure or enhance security. This is a non negotiable point with our IT department so in order to work around it we wondered if it would be possible to create an automated weekly &amp;#39;sweep&amp;#39; of emails on the list to free them up and allow reports to get through? I raised this in a support ticket recently and was advised that t here is no way to look across the board to see who is on the suppression list and it would need to be one email address at a time. and send the addresses through as and when to be removed. Happy to provide more information if I can. Many thanks, Shona</description></item><item><title>Forum Post: RE: Is the process of encrypting / decrypting a sessionkey documented?</title><link>https://communitytest.tessitura.com/topical_groups/developers/f/developer-q-a/35002/is-the-process-of-encrypting-decrypting-a-sessionkey-documented/91037</link><pubDate>Fri, 02 Feb 2024 17:23:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:56a582f8-3d6b-47a3-ac2f-9790ec02f39c</guid><dc:creator>Lee Bradley</dc:creator><description>Hi Daniel, If you&amp;#39;re looking at implementing your own decryption code in JS then you&amp;#39;d need something like this // Values you&amp;#39;ll need to get from TNEW admin * hmacLength * hmacKey * blockSize * passphrase * salt * encryptionKeyIterations * encryptionKeyLength let encryptedSessionKey = &amp;#39;xxxx&amp;#39;; // with base64 encoding (as we pass it via URL parameter) encryptedSessionKey = Buffer.from(encryptedSessionKey, &amp;#39;base64&amp;#39;); let hmac = ciphertext.slice(0, hmacLength); // slice hmac based on hmac length let encryptedMessage = ciphertext.slice(hmacLength); // slice encrypted message (iv + encrypted bytes) let newMac = crypto.createHmac(&amp;#39;sha256&amp;#39;, hmacKey); // create a new HMAC based on encrypted message newMac.update(encryptedMessage, &amp;#39;binary&amp;#39;); newMac = newMac.digest(&amp;#39;hex&amp;#39;); if (hmac.toString(&amp;#39;hex&amp;#39;) !== newMac.toString(&amp;#39;hex&amp;#39;)) { throw &amp;#39;Hmac failure&amp;#39;; } let iv = encryptedMessage.slice(0, blockSize); // slice iv from encrypted message let encryptedBytes = encryptedMessage.slice(blockSize); // slice encrypted bytes from encrypted message let encryptionKey = crypto.pbkdf2Sync(passphrase, salt, encryptionKeyIterations, encryptionKeyLength, &amp;#39;sha1&amp;#39;);// derive key using PBKDF2 let decipher = crypto.createDecipheriv(&amp;#39;aes-256-cbc&amp;#39;, encryptionKey, iv);// create cbc decipher with key and iv let decrypted = decipher.update(encryptedBytes);// deciper encrypted bytes decrypted = Buffer.concat([decrypted, decipher.final()]); // This should give you a string with the session key and datetime stamp separated with a pipe return decrypted.toString();</description></item><item><title>Forum Post: RE: Importing MSA data</title><link>https://communitytest.tessitura.com/topical_groups/developers/f/developer-q-a/35045/importing-msa-data/91032</link><pubDate>Fri, 02 Feb 2024 15:48:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:7f5ebea5-b43b-4f6d-b9bc-5a4c2888ae6d</guid><dc:creator>Kirk McMahon</dc:creator><description>I think we&amp;#39;ve done something similar to what you&amp;#39;re wanting. We have a number of custom regions we&amp;#39;ve added to TR_GEO_AREA (kind of similar to how you&amp;#39;re wanting MSA regions). We then uploaded into our database a custom mapping table where we mapped a large list of 5-digit ZIP codes to these custom Geo Area values. We then updated LP_UPDATE_GEOAREA to reference this mapping table to see if there&amp;#39;s a match, which avoids having to hard-code individual ZIPs into that procedure. DECLARE @mapping_area INT SET @mapping_area = (SELECT geo_area FROM LTR_GEO_AREA_MAPPING WHERE zip_code = (substring(@postal_code, 1, 5))) UPDATE t_address SET geo_area = CASE ... WHEN country = 1 and @mapping_area IS NOT NULL THEN @mapping_area ... END WHERE address_no = @address_no So possibly something like this could work for you. You can send me a message if you want more details.</description></item><item><title>Forum Post: Importing MSA data</title><link>https://communitytest.tessitura.com/topical_groups/developers/f/developer-q-a/35045/importing-msa-data</link><pubDate>Fri, 02 Feb 2024 14:05:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:3b08fd2e-28e0-46e3-94ef-5d6d03e94a86</guid><dc:creator>Lindsay Rogillio</dc:creator><description>Has anyone successfully imported MSA data? We&amp;#39;d like to use this data in segmentation in order to pull prospect lists based on an MSA region. We were told we could import the data into the Geographic Areas (TR_GEO_AREA) table, and that there&amp;#39;s a process that runs on the backend to tie the constituent&amp;#39;s address to the MSA region. What we&amp;#39;ve found it that the process has each key programmed line by line to update each address based on the zip code. So it appears to us we would have to update the table, then rewrite the whole process. Has anyone already done this and would be willing to walk us through how you did it? Or if you&amp;#39;ve found a more efficient way to write the process instead of programming line by line?</description><category domain="https://communitytest.tessitura.com/topical_groups/developers/tags/SQL">SQL</category></item><item><title>Forum Post: RE: Is the process of encrypting / decrypting a sessionkey documented?</title><link>https://communitytest.tessitura.com/topical_groups/developers/f/developer-q-a/35002/is-the-process-of-encrypting-decrypting-a-sessionkey-documented/90989</link><pubDate>Thu, 01 Feb 2024 14:58:00 GMT</pubDate><guid isPermaLink="false">fd08b0f2-65fa-4b2b-916a-cce3e88b61d0:4f9e4931-830a-46e1-907b-e659c53152fd</guid><dc:creator>Daniel Brown</dc:creator><description>Hey DGomez, just to say thanks - I&amp;#39;ve used you JavaScript as the basis for a new webpage. My app sends a post request to this, the response being the decrypted string. This would be insecure if public facing, so the page is blocked to external access and can only be requested from within the server. It&amp;#39;s a bit hacky, but making use of native JavaScript saved installing a load of new encryption components on the server, so it&amp;#39;s a quick solution for the rush I&amp;#39;m in now! Thanks for everything you sent, it was really helpful - once the pressure is off in terms of launch date, I will use it to build a more elegant approach :)</description></item></channel></rss>