<!-- 
RSS generated by JIRA (9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b) at Mon Feb 12 06:51:38 CET 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Magnolia - Issue tracker</title>
    <link>https://jira.magnolia-cms.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-uk</language>    <build-info>
        <version>9.4.2</version>
        <build-number>940002</build-number>
        <build-date>19-01-2023</build-date>
    </build-info>


<item>
            <title>[MGNLRESTUI-75] Broken REST Client and REST Client UI demo projects</title>
                <link>https://jira.magnolia-cms.com/browse/MGNLRESTUI-75</link>
                <project id="16884" key="MGNLRESTUI">Magnolia REST Client UI</project>
                    <description>&lt;p&gt;Several of the REST Client and REST Client UI documented demo projects are no longer working - because the API&apos;s have changed. They should be updated. Where possible consider changing to a mock service (or a simple mock file) so that they will not go out of date.&lt;/p&gt;

&lt;p&gt;Some context:&#160;&lt;br/&gt;
&lt;a href=&quot;https://magnolia-cms.slack.com/archives/C02RDS0KBHQ/p1682500051736859?thread_ts=1682344476.270159&amp;amp;cid=C02RDS0KBHQ&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://magnolia-cms.slack.com/archives/C02RDS0KBHQ/p1682500051736859?thread_ts=1682344476.270159&amp;amp;cid=C02RDS0KBHQ&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
        <key id="132728">MGNLRESTUI-75</key>
            <summary>Broken REST Client and REST Client UI demo projects</summary>
                <type id="3" iconUrl="https://jira.magnolia-cms.com/secure/viewavatar?size=xsmall&amp;avatarId=10898&amp;avatarType=issuetype">Task</type>
                                            <priority id="3" iconUrl="https://jira.magnolia-cms.com/images/icons/priorities/major.svg">Major</priority>
                        <status id="10433" iconUrl="https://jira.magnolia-cms.com/images/icons/statuses/generic.png" description="This issue has been evaluated by development and accepted to be planned in.">Accepted</status>
                    <statusCategory id="2" key="new" colorName="default"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="-1">Unassigned</assignee>
                                    <reporter username="czimmermann">Christopher Zimmermann</reporter>
                        <labels>
                    </labels>
                <created>Thu, 11 May 2023 12:14:17 +0200</created>
                <updated>Fri, 8 Sep 2023 13:25:33 +0200</updated>
                                                                                <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                                                                <comments>
                            <comment id="356723" author="srhodes" created="Thu, 11 May 2023 15:20:15 +0200"  >&lt;p&gt;You can base some mock services on something like this policy provider. It&apos;s very straight-forward:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
&lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; express = require(&lt;span class=&quot;code-quote&quot;&gt;&apos;express&apos;&lt;/span&gt;);
&lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; app = express();
&lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; port = 3000;

app.use(express.json()); &lt;span class=&quot;code-comment&quot;&gt;// Middleware to parse JSON body of incoming requests
&lt;/span&gt;
&lt;span class=&quot;code-comment&quot;&gt;// Example policy data
&lt;/span&gt;let policies = [
    {
        policyNumber: &lt;span class=&quot;code-quote&quot;&gt;&apos;POL-12345&apos;&lt;/span&gt;,
        policyHolder: &lt;span class=&quot;code-quote&quot;&gt;&apos;John Doe&apos;&lt;/span&gt;,
        effectiveDate: &lt;span class=&quot;code-quote&quot;&gt;&apos;2023-01-01&apos;&lt;/span&gt;,
        expirationDate: &lt;span class=&quot;code-quote&quot;&gt;&apos;2024-01-01&apos;&lt;/span&gt;,
    },
    {
        policyNumber: &lt;span class=&quot;code-quote&quot;&gt;&apos;POL-67890&apos;&lt;/span&gt;,
        policyHolder: &lt;span class=&quot;code-quote&quot;&gt;&apos;Jane Doe&apos;&lt;/span&gt;,
        effectiveDate: &lt;span class=&quot;code-quote&quot;&gt;&apos;2023-02-01&apos;&lt;/span&gt;,
        expirationDate: &lt;span class=&quot;code-quote&quot;&gt;&apos;2024-02-01&apos;&lt;/span&gt;,
    },
];

&lt;span class=&quot;code-comment&quot;&gt;// Basic Authentication Middleware
&lt;/span&gt;function basicAuth(req, res, next) {
    &lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; authHeader = req.headers.authorization;

    &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (!authHeader) {
        res.setHeader(&lt;span class=&quot;code-quote&quot;&gt;&apos;WWW-Authenticate&apos;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&apos;Basic&apos;&lt;/span&gt;);
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; res.status(401).json({ error: &lt;span class=&quot;code-quote&quot;&gt;&apos;Unauthorized&apos;&lt;/span&gt; });
    }

    &lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; [username, password] = Buffer.from(authHeader.split(&lt;span class=&quot;code-quote&quot;&gt;&apos; &apos;&lt;/span&gt;)[1], &lt;span class=&quot;code-quote&quot;&gt;&apos;base64&apos;&lt;/span&gt;).toString().split(&lt;span class=&quot;code-quote&quot;&gt;&apos;:&apos;&lt;/span&gt;);

    &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (username !== &lt;span class=&quot;code-quote&quot;&gt;&apos;superuser&apos;&lt;/span&gt; || password !== &lt;span class=&quot;code-quote&quot;&gt;&apos;superuser&apos;&lt;/span&gt;) {
        res.setHeader(&lt;span class=&quot;code-quote&quot;&gt;&apos;WWW-Authenticate&apos;&lt;/span&gt;, &lt;span class=&quot;code-quote&quot;&gt;&apos;Basic&apos;&lt;/span&gt;);
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; res.status(401).json({ error: &lt;span class=&quot;code-quote&quot;&gt;&apos;Invalid credentials&apos;&lt;/span&gt; });
    }

    next();
}

&lt;span class=&quot;code-comment&quot;&gt;// Add basic authentication middleware to protect the following routes
&lt;/span&gt;app.use(basicAuth);

&lt;span class=&quot;code-comment&quot;&gt;// Get a list of policies
&lt;/span&gt;app.get(&lt;span class=&quot;code-quote&quot;&gt;&apos;/policies&apos;&lt;/span&gt;, (req, res) =&amp;gt; {
    res.json(policies);
});

&lt;span class=&quot;code-comment&quot;&gt;// Get a policy based on the policy number
&lt;/span&gt;app.get(&lt;span class=&quot;code-quote&quot;&gt;&apos;/policies/:policyNumber&apos;&lt;/span&gt;, (req, res) =&amp;gt; {
    &lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; policyNumber = req.params.policyNumber;
    &lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; policy = policies.find((p) =&amp;gt; p.policyNumber === policyNumber);

    &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (!policy) {
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; res.status(404).json({ error: &lt;span class=&quot;code-quote&quot;&gt;&apos;Policy not found&apos;&lt;/span&gt; });
    }

    res.json(policy);
});

&lt;span class=&quot;code-comment&quot;&gt;// Add a &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; policy
&lt;/span&gt;app.post(&lt;span class=&quot;code-quote&quot;&gt;&apos;/policies&apos;&lt;/span&gt;, (req, res) =&amp;gt; {
    &lt;span class=&quot;code-keyword&quot;&gt;const&lt;/span&gt; newPolicy = req.body;

    &lt;span class=&quot;code-comment&quot;&gt;// Validate &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; policy data
&lt;/span&gt;    &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (!newPolicy.policyNumber || !newPolicy.policyHolder || !newPolicy.effectiveDate || !newPolicy.expirationDate) {
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; res.status(400).json({ error: &lt;span class=&quot;code-quote&quot;&gt;&apos;Missing required policy fields&apos;&lt;/span&gt; });
    }

    &lt;span class=&quot;code-comment&quot;&gt;// Check &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; a policy with the same policy number already exists
&lt;/span&gt;    &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (policies.some((p) =&amp;gt; p.policyNumber === newPolicy.policyNumber)) {
        &lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt; res.status(400).json({ error: &lt;span class=&quot;code-quote&quot;&gt;&apos;Policy with &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; number already exists&apos;&lt;/span&gt; });
    }

    &lt;span class=&quot;code-comment&quot;&gt;// Add &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; policy to the array
&lt;/span&gt;    policies.push(newPolicy);

    &lt;span class=&quot;code-comment&quot;&gt;// Send the &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; policy as the response
&lt;/span&gt;    res.status(201).json(newPolicy);
});

app.listen(port, () =&amp;gt; {
    console.log(`Server is running on http:&lt;span class=&quot;code-comment&quot;&gt;//localhost:${port}`);
&lt;/span&gt;});
 &lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Save that to index.js with a package.json like this:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
  &lt;span class=&quot;code-quote&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;mock-pc-server&quot;&lt;/span&gt;,
  &lt;span class=&quot;code-quote&quot;&gt;&quot;version&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;1.0.0&quot;&lt;/span&gt;,
  &lt;span class=&quot;code-quote&quot;&gt;&quot;description&quot;&lt;/span&gt;: &quot;&quot;,
  &lt;span class=&quot;code-quote&quot;&gt;&quot;main&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;index.js&quot;&lt;/span&gt;,
  &lt;span class=&quot;code-quote&quot;&gt;&quot;scripts&quot;&lt;/span&gt;: {
    &lt;span class=&quot;code-quote&quot;&gt;&quot;test&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;echo \&quot;&lt;/span&gt;Error: no test specified\&lt;span class=&quot;code-quote&quot;&gt;&quot; &amp;amp;&amp;amp; exit 1&quot;&lt;/span&gt;
  },
  &lt;span class=&quot;code-quote&quot;&gt;&quot;keywords&quot;&lt;/span&gt;: [],
  &lt;span class=&quot;code-quote&quot;&gt;&quot;author&quot;&lt;/span&gt;: &quot;&quot;,
  &lt;span class=&quot;code-quote&quot;&gt;&quot;license&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;ISC&quot;&lt;/span&gt;,
  &lt;span class=&quot;code-quote&quot;&gt;&quot;dependencies&quot;&lt;/span&gt;: {
    &lt;span class=&quot;code-quote&quot;&gt;&quot;express&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;^4.18.2&quot;&lt;/span&gt;
  }
}
 &lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;tt&gt;Then run node index.js&lt;/tt&gt;&lt;/p&gt;</comment>
                            <comment id="356726" author="srhodes" created="Thu, 11 May 2023 15:23:06 +0200"  >&lt;p&gt;Or even better, use Topher&apos;s suggestion and use[ JSON Server |&lt;a href=&quot;https://www.npmjs.com/package/json-server&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://www.npmjs.com/package/json-server&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10020">
                    <name>dependency</name>
                                                                <inwardlinks description="is depended upon by">
                                        <issuelink>
            <issuekey id="84884">MGNLRESTCL-149</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="84888">MGNLRESTUI-23</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_14166" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Acceptance criteria</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10111" key="com.atlassian.jira.toolkit:reporterdomain">
                        <customfieldname>Company</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>magnolia-cms.com</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_10031" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Thu, 11 May 2023 15:20:15 +0200</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_12730" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14151" key="com.atlassian.jira.toolkit:message">
                        <customfieldname>Docu info</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_10246" key="com.pyxis.greenhopper.jira:gh-epic-link">
                        <customfieldname>Epic Link</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>MGNLRESTCL-217</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10061" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comm is not jira-dev</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>true</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10071" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last participant</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>czimmermann</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_13136" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            39 weeks, 3 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_10020" key="com.atlassian.jira.toolkit:attachments">
                        <customfieldname>Number of attachments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10150" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname>Number of comments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>czimmermann</customfieldvalue>
            <customfieldvalue>srhodes</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                <customfield id="customfield_10833" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzztvm:60o448</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10244" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_14167" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Task DoR</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_12430" key="com.atlassian.teams:rm-teams-custom-field-team">
                        <customfieldname>Team</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[26]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_14145" key="com.intenso.jira.issue-templates:issue-templates-customfield">
                        <customfieldname>Template</customfieldname>
                        <customfieldvalues>
                            


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_15131" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Time in Discovery</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_13933" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Urgency (resolution)</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="15724"><![CDATA[Normal]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>