{"id":392,"date":"2014-10-28T13:49:19","date_gmt":"2014-10-28T13:49:19","guid":{"rendered":"http:\/\/artigianodelsoftware.wordpress.com\/?p=392"},"modified":"2014-10-28T13:49:19","modified_gmt":"2014-10-28T13:49:19","slug":"accedere-ai-dati-di-confluence","status":"publish","type":"post","link":"https:\/\/artigianodelsoftware.it\/blog\/2014\/10\/28\/accedere-ai-dati-di-confluence\/","title":{"rendered":"Accedere ai dati di CONFLUENCE"},"content":{"rendered":"<div class=\"pdfprnt-buttons pdfprnt-buttons-post pdfprnt-top-right\"><a href=\"javascript: imageToPdf()\" class=\"pdfprnt-button pdfprnt-button-pdf\" target=\"_self\"><img src=\"https:\/\/artigianodelsoftware.it\/blog\/wp-content\/plugins\/pdf-print\/images\/pdf.png\" alt=\"image_pdf\" title=\"Visualizza PDF\" \/><\/a><a href=\"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/posts\/392?print=print\" class=\"pdfprnt-button pdfprnt-button-print\" target=\"_blank\"><\/a><\/div><blockquote>\n<h1>Scaviamo in profondit\u00e0<\/h1>\n<\/blockquote>\n<p>In questo post andremo a vedere, con alcuni esempi, come possiamo accedere ai dati di Confluence e JIRA, lavorando direttamente su DB. In particolare vedremo alcuni esempi di come sono memorizzate le informazioni. In figura vediamo lo schema delle tabelle di Confluence.<\/p>\n<p><a href=\"https:\/\/confluence.atlassian.com\/download\/attachments\/127369837\/ConfluenceTables-SelectedTables.png?version=1&amp;modificationDate=1366091261234&amp;api=v2\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter\" src=\"https:\/\/confluence.atlassian.com\/download\/attachments\/127369837\/ConfluenceTables-SelectedTables.png?version=1&amp;modificationDate=1366091261234&amp;api=v2\" alt=\"\" width=\"524\" height=\"627\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<blockquote>\n<h1>Perch\u00e9 accedere ai dati?<\/h1>\n<\/blockquote>\n<p>Prima di iniziare ad esplorare le tabelle dei due sistemi, conviene porsi una domanda fondamentale:\u00a0<em><strong>Perch\u00e9 dobbiamo accedere direttamente ai dati del DB? Quale \u00e8 la necessit\u00e0?<\/strong><\/em><\/p>\n<p>Uno dei motivi pi\u00f9 importanti \u00e8 sicuramente quello di dover accedere ad informazioni a cui non si avrebbe altrimenti accesso, oppure il dover eseguire una operazione massiva. Questo perch\u00e9 non sempre \u00e8 possibile eseguire una operazione su di una grossa mole di dati, in quanto Confluence\/JIRA non la consentono, come ribadito in altri <a title=\"Watch Remover\" href=\"http:\/\/artigianodelsoftware.wordpress.com\/2014\/09\/07\/watch-remover\/\">post <\/a>di questo blog. Fino a quando non saranno disponibili delle funzionalit\u00e0 di un certo tipo, occorre dover agire direttamente da DB. In aggiunta, queste informazioni sono sicuramente utili a coloro che vogliono sviluppare addon per i prodotti Atlassian \ud83d\ude42<\/p>\n<p>&nbsp;<\/p>\n<blockquote>\n<h1>Precauzioni<\/h1>\n<\/blockquote>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignleft\" src=\"http:\/\/www.olidarex.altervista.org\/mondocurioso\/punto-esclamativo-3.png\" alt=\"\" width=\"115\" height=\"115\" \/><\/p>\n<p>Prima di agire, occorre sempre che siano prese delle semplici precauzioni. Il motivo mi sembra abbastanza semplice: Quando si lavora direttamente su DB, \u00e8 abbastanza facile arrecare danni. Di conseguenza, sempre meglio avere un backup dei dati\/tabelle\/DB intero prima di procedere con le modifiche.<\/p>\n<p>Il mio consiglio \u00e8 sempre quello di avere a disposizione un backup del DB completo + una copia delle tabelle su cui si agisce, prima di procedere con qualsiasi operazione.<\/p>\n<p>&nbsp;<\/p>\n<blockquote>\n<h1>Un primo esempio<\/h1>\n<\/blockquote>\n<p>Supponiamo che si voglia modificare gli avatar standard, con un avatar differente (i motivi possono essere qualsiasi: Marketing aziendale,\u00a0 impostare un avatar di default pi\u00f9 carino, etc).<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/artigianodelsoftware.files.wordpress.com\/2014\/10\/profile.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-large wp-image-429\" src=\"https:\/\/artigianodelsoftware.files.wordpress.com\/2014\/10\/profile.png?w=660\" alt=\"profile\" width=\"660\" height=\"348\" srcset=\"https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/profile.png 1023w, https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/profile-300x158.png 300w, https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/profile-768x405.png 768w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Al momento, solo gli utenti possono modificare il proprio avatar. A livello di amministrazione, non \u00e8 possibile eseguire tale operazione. La precedente immagine mostra dove \u00e8 possibile eseguire tale operazione. Adesso vediamo come \u00e8 possibile aggirare tale limitazione, semplicemente andando a lavorare su DB.<\/p>\n<p>In prima battuta esaminiamo le tabelle dove sono contenute le informazioni delle utenze. In particolare faremo riferimento a:<\/p>\n<ul>\n<li><em><strong>cwd_user<\/strong> <\/em>&#8211; Tabella contenente le informazioni degli utenti che sono stati configurati in Confluence.<\/li>\n<li><em><strong>cwd_group\u00a0<\/strong><\/em>&#8211; Tabella contenente le informazioni dei gruppi definiti su Confluence.<\/li>\n<li><em><strong>os_propertyentry<\/strong><\/em> &#8211; Tabella contenente anche le informazioni degli avatar.<\/li>\n<li><em><strong>user_mapping<\/strong><\/em> &#8211; Tabella contenente la corrispondenza uid &#8211; nome utente.<\/li>\n<\/ul>\n<p>La tabella che ci interessa in particolare \u00e8 l&#8217;ultima. Dobbiamo andare a cercare le informazioni degli avatar, utilizzando questa query:<\/p>\n<p><a href=\"https:\/\/artigianodelsoftware.files.wordpress.com\/2014\/10\/query1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-large wp-image-447\" src=\"https:\/\/artigianodelsoftware.files.wordpress.com\/2014\/10\/query1.png?w=660\" alt=\"query\" width=\"660\" height=\"320\" srcset=\"https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/query1.png 870w, https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/query1-300x146.png 300w, https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/query1-768x373.png 768w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/a><\/p>\n<p>Come si vede dalla precedente immagine, quello che dobbiamo andare a cercare \u00e8 il campo\u00a0<em><strong>String_val<\/strong><\/em>. In questo campo \u00e8 presente la localizzazione dell&#8217;avatar. In questo caso ho assegnato un avatar di default. \ud83d\ude42 Nel campo Entity_name abbiamo la userid. Come possiamo vedere \u00e8 abbastanza &#8230;.. criptata. Come facciamo a decodificarla? Il giro \u00e8 il seguente:<\/p>\n<ul>\n<li>Dalla tabella\u00a0<em><strong>os_propertyentry<\/strong><\/em> abbiamo le indicazioni del path della immagine<\/li>\n<li>Dalla tabella\u00a0<em><strong>user_mapping<\/strong><\/em> abbiamo le indicazioni dell&#8217;uid dell&#8217;utente<\/li>\n<li>Dalla tabella <em><strong>cwd_user<\/strong> <\/em>abbiamo il nome dell&#8217;utente.<\/li>\n<\/ul>\n<p>Le seguenti immagini chiariscono il tutto: Dall&#8217;ID identifichiamo l&#8217;utente<\/p>\n<p><a href=\"https:\/\/artigianodelsoftware.files.wordpress.com\/2014\/10\/query01.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-large wp-image-448\" src=\"https:\/\/artigianodelsoftware.files.wordpress.com\/2014\/10\/query01.png?w=660\" alt=\"query01\" width=\"660\" height=\"327\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/artigianodelsoftware.files.wordpress.com\/2014\/10\/query02.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-large wp-image-449\" src=\"https:\/\/artigianodelsoftware.files.wordpress.com\/2014\/10\/query02.png?w=660\" alt=\"query02\" width=\"660\" height=\"322\" srcset=\"https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/query02.png 859w, https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/query02-300x147.png 300w, https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/query02-768x376.png 768w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/a><\/p>\n<p>Di conseguenza, per modificare l&#8217;avatar dell&#8217;utente admin (in questo caso), possiamo semplicemente modificare il path e andare ad assegnarne uno nuovo. Supponiamo di creare una sottodirectory nel path utilizzato da Confluence per gestire gli avatar di default, ovvero:<\/p>\n<blockquote>\n<h4 style=\"text-align:center;\"><strong>&lt;Install_dir_Confluence&gt;confluenceimagesiconsprofilepic<\/strong><\/h4>\n<\/blockquote>\n<p style=\"text-align:left;\">supponiamo di chiamarla Demoprofile e di memorizzare il seguente avatar:<\/p>\n<p style=\"text-align:left;\"><a href=\"https:\/\/artigianodelsoftware.files.wordpress.com\/2014\/10\/pinguino48.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-450\" src=\"https:\/\/artigianodelsoftware.files.wordpress.com\/2014\/10\/pinguino48.png\" alt=\"pinguino48\" width=\"48\" height=\"48\" \/><\/a><\/p>\n<p style=\"text-align:left;\">Eseguire il restart del servizio Confluence e, come per magia, il risultato sar\u00e0 il seguente:<\/p>\n<p style=\"text-align:left;\">\u00a0<a href=\"https:\/\/artigianodelsoftware.files.wordpress.com\/2014\/10\/profilomod.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-large wp-image-452\" src=\"https:\/\/artigianodelsoftware.files.wordpress.com\/2014\/10\/profilomod.png?w=660\" alt=\"profiloMod\" width=\"660\" height=\"161\" srcset=\"https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/profilomod.png 1335w, https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/profilomod-300x73.png 300w, https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/profilomod-768x188.png 768w, https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/profilomod-1024x250.png 1024w, https:\/\/artigianodelsoftware.it\/blog\/wp-content\/uploads\/2014\/10\/profilomod-1200x293.png 1200w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/a><\/p>\n<blockquote>\n<h1 style=\"text-align:left;\">Conclusioni<\/h1>\n<\/blockquote>\n<p>Abbiamo visto un esempio di come si pu\u00f2 modificare il database per modificare gli avatar degli utenti di Confluence. Questo esempio pu\u00f2 essere utilizzato anche per le installazioni per cui gli utenti sono presi da LDAP e non sono solo utenti locali di Confluence. \u00a0Nei prossimi post vedremo altri esempi di come si pu\u00f2 accedere ai dati e &#8230;. vedere altre informazioni.<\/p>\n<div class=\"clearfix\"><span class='ldc-ul_cont' onclick=\"alter_ul_post_values(this,'392','like')\" >Likes<img src=\"https:\/\/artigianodelsoftware.it\/blog\/wp-content\/plugins\/like-dislike-counter-for-posts-pages-and-comments\/images\/up.png\" \/>(<span>0<\/span>)<\/span><span class='ldc-ul_cont' onclick=\"alter_ul_post_values(this,'392','dislike')\" >Dislikes<img src=\"https:\/\/artigianodelsoftware.it\/blog\/wp-content\/plugins\/like-dislike-counter-for-posts-pages-and-comments\/images\/down.png\" \/>(<span>0<\/span>)<\/span><\/div>","protected":false},"excerpt":{"rendered":"<p>Scaviamo in profondit\u00e0 In questo post andremo a vedere, con alcuni esempi, come possiamo accedere ai dati di Confluence e JIRA, lavorando direttamente su DB. In particolare vedremo alcuni esempi di come sono memorizzate le informazioni. In figura vediamo lo<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","footnotes":""},"categories":[3,7,14,18,19,25],"tags":[30,34,48,52,70,82,98],"_links":{"self":[{"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/posts\/392"}],"collection":[{"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/comments?post=392"}],"version-history":[{"count":0,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/posts\/392\/revisions"}],"wp:attachment":[{"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/media?parent=392"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/categories?post=392"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/artigianodelsoftware.it\/blog\/wp-json\/wp\/v2\/tags?post=392"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}