diff --git a/.gitignore b/.gitignore index fc7f5dd..96b1258 100644 --- a/.gitignore +++ b/.gitignore @@ -10,9 +10,9 @@ web/mustard/crawler/peers web/mustard/crawler/zzz-materiali/ web/mustard/zzz-estemp/ web/mustard/zzz-materiali/mastostart_struttura_e_dati_pro_altervista.sql.gz +web/mustard/zzz-materiali/mastostart_struttura_e_dati_test.sql.gz web/mustard/zzz-materiali/.htaccess web/mustard/zzz-materiali/geonames/ -web/mustard/zzz-materiali/icona.svg web/mustard/zzz-materiali/locales.json web/mustard/zzz-materiali/simplemaps_worldcities_basicv1.6.zip web/mustard/zzz-materiali/snippettoni.php diff --git a/web/INSTALL b/web/INSTALL index 81ec198..3aa7a3c 100644 --- a/web/INSTALL +++ b/web/INSTALL @@ -1,7 +1,22 @@ -- Se hai installato mastostart nella DocumentRoot di apache passa al punto - successivo; se invece l'hai installato in una sottodirectory della - DocumentRoot (per esempio «[DocumentRoot]/mastostart») imposta al percorso - della sottodirectory la variabile «instpath» in «mastostart.ini» - (per esempio «instpath="/mastostart"») e la direttiva «RewriteBase» - in «.htaccess» (per esempio «RewriteBase "/mastostart") -- ... +- Le istruzioni in questo paragrafo riguardano un'installazione sotto + apache; sotto nginx o altri webserver dovrebbe trattarsi di adeguarle. + Se hai installato mastostart nella DocumentRoot di apache o di un + virtualhost definito in apache bona lè, sei già a posto; se invece l'hai + installato in una sottodirectory della DocumentRoot (per esempio + «[DocumentRoot]/mastostart») imposta al percorso della sottodirectory + la variabile «instpath» in «mastostart.ini» (per esempio + «instpath="/mastostart"») e la direttiva «RewriteBase» in «.htaccess» + (per esempio «RewriteBase "/mastostart"). + +- Per quanto riguarda l'installazione di Mustard, importa in mariadb o mysql + il dump sql «mastostart_struttura_e_dati_pro_installazione.sql.gz» + che trovi nella directory «mustard/zzz-materiali/». + Edita il file di configurazione commentato «mustard/sec/mustard.ini». + Crea un “superadmin” per poter entrare in mustard lanciando + «php addsuperadmin.php» dalla directory «mustard/tools/». + +- Per quanto riguarda il crawler che crea/aggiorna i dati relativi alle + istanze nel database, si tratta di farne girare i due componenti + uno dopo l'altro, la prima volta magari da shell, poi con un cron job + (quotidiano? settimanale?). Per farlo è sufficiente lanciare lo script + «crawl.sh» che si trova nella directory «mustard/crawler». diff --git a/web/mustard/crawler/crawl.sh b/web/mustard/crawler/crawl.sh new file mode 100755 index 0000000..2d43867 --- /dev/null +++ b/web/mustard/crawler/crawl.sh @@ -0,0 +1,4 @@ +#!/bin/sh +BASEDIR=$(dirname $0) +cd "$BASEDIR" +php peerscrawl.php && php crawler.php diff --git a/web/mustard/crawler/crawler.php b/web/mustard/crawler/crawler.php index 824fd03..06e97e3 100755 --- a/web/mustard/crawler/crawler.php +++ b/web/mustard/crawler/crawler.php @@ -138,7 +138,7 @@ if ($opts['log']) { } } -$inifp=__DIR__.'/../sec/mastostartadmin.ini'; +$inifp=__DIR__.'/../sec/mustard.ini'; $iniarr=@parse_ini_file($inifp) or mexit('Impossibile aprire il file di configurazione «'.$inifp.'»'.N,1); $link=@mysqli_connect($iniarr['db_host'],$iniarr['db_admin_name'],$iniarr['db_admin_password'],$iniarr['db_name'],$iniarr['db_port'],$iniarr['db_socket']) diff --git a/web/mustard/dafa.txt b/web/mustard/dafa.txt index 5ee68a8..ed7f3ca 100644 --- a/web/mustard/dafa.txt +++ b/web/mustard/dafa.txt @@ -4,14 +4,15 @@ * fatto # in corso +- crawler.php: possibilità di passargli le opzioni da riga di comando * viewinst.php - pagina gestione accounts - pagina gestione proprio account - pagina gestione blacklist - pagina reset password -- una pagina che rilevi eventuali inconsistenze nel db, tra le quali: mail account guest diversa da mail di contatto istanza () -# implementare la faccenda dell'invio di mail preformattate agli admin con invito a editare i propri dati (quindi implementare "livelli di admin" e relative restrizioni: admin invitat* può vedere solo la pagina relativa alla propria istanza, solo aggiungere valori (non in tutti i casi), editare ed eliminare solo valori che ha aggiunto e solo se non sono già stati linkati da altr*) -- dispinst.php, invite.php: possibilità di reinvitare admin già invitat* +- una pagina che rilevi eventuali inconsistenze nel db, tra le quali: mail account guest diversa da mail di contatto istanza (mail contatto d'istanza può cambiare nel tempo) +* implementare la faccenda dell'invio di mail preformattate agli admin con invito a editare i propri dati (quindi implementare "livelli di admin" e relative restrizioni: admin invitat* può vedere solo la pagina relativa alla propria istanza, solo aggiungere valori (non in tutti i casi), editare ed eliminare solo valori che ha aggiunto e solo se non sono già stati linkati da altr*) +* dispinst.php, invite.php: possibilità di "sollecitare" admin già invitat* ? edinstres.php deve mostrare messaggio di successo * edinst.php: un'icona per deselezionare Locality * nei vari helper, sarebbe meglio morisse in json, alla bisogna diff --git a/web/mustard/include/dispinst.php b/web/mustard/include/dispinst.php index 8b07ec9..fcb6ab1 100644 --- a/web/mustard/include/dispinst.php +++ b/web/mustard/include/dispinst.php @@ -87,11 +87,11 @@ function dispinst(&$row,&$cols,&$link,&$dlang,&$account,$showcount,$finst,$cinst $out.=''.N; if ($account['Level']!='guest') { if (!is_null($row['GuestID'])) { - $out.=''.N; + $out.=''.N; } elseif (trim($row['Email'])=='') { - $out.=''.N; + $out.=''.N; } else { - $out.=''.N; + $out.=''.N; } } $attr=booly(trimname($cols['Instances.Blacklisted']['name']).': ',$row['Blacklisted'],false,true).N; @@ -99,7 +99,7 @@ function dispinst(&$row,&$cols,&$link,&$dlang,&$account,$showcount,$finst,$cinst $attr.=booly(trimname($cols['Instances.Good']['name']).': ',$row['Good']).N; $attr.=booly(trimname($cols['Instances.Chosen']['name']).': ',$row['Chosen']).N; $attr.=booly(trimname($cols['Instances.Visible']['name']).': ',$row['Visible']).N; -/* $attr.=booly($cols['Instances.RegOpen']['name'].': ',$row['RegOpen']).N; + /*$attr.=booly($cols['Instances.RegOpen']['name'].': ',$row['RegOpen']).N; $attr.=booly($cols['Instances.RegReqApproval']['name'].': ',$row['RegReqApproval'],true,true).N;*/ $sres=mysqli_query($link,'SELECT * FROM InstChecks WHERE InstID='.$row['IID'].' ORDER BY Time DESC') or muoribene(mysqli_error($link),true); diff --git a/web/mustard/include/getadmacc.php b/web/mustard/include/getadmacc.php index 653c4d9..ae7e9a8 100644 --- a/web/mustard/include/getadmacc.php +++ b/web/mustard/include/getadmacc.php @@ -4,6 +4,8 @@ $res=mysqli_query($link,'SELECT * FROM Admins WHERE ID='.$_SESSION['AdmID']) or muoribene(mysqli_error($link),true); if (mysqli_num_rows($res)==1) { $account=mysqli_fetch_assoc($res); + if ($account['Enabled']==0) + muoribene('Your account has been disabled.',true); if ($account['Level']=='guest') { $res=mysqli_query($link,'SELECT ID FROM Instances WHERE GuestID='.$account['ID']) or muoribene(mysqli_error($link),true); @@ -12,7 +14,7 @@ if (mysqli_num_rows($res)==1) { $account['Insts'][]=$row['ID']; } } else { - muoribene('Non esiste un account con ID='.$_SESSION['AdmID'],true); + muoribene('There’s no account with ID='.$_SESSION['AdmID'].'.',true); } ?> diff --git a/web/mustard/include/getiniarr.php b/web/mustard/include/getiniarr.php index 655e3df..98550b4 100644 --- a/web/mustard/include/getiniarr.php +++ b/web/mustard/include/getiniarr.php @@ -3,10 +3,10 @@ require(__DIR__.'/ckkeys.php'); function getiniarr() { - $inifp='sec/mastostartadmin.ini'; + $inifp='sec/mustard.ini'; $iniarr=parse_ini_file($inifp) or muoribene('Couldn’t open configuration file «'.$inifp.'».',false); - $missing=ckkeys(array('db_host','db_port','db_socket','db_name','db_admin_name','db_admin_password','ref_name','ref_email'),$iniarr); + $missing=ckkeys(array('db_host','db_port','db_socket','db_name','db_admin_name','db_admin_password','ref_name','ref_email','site_domain','mail_test_address'),$iniarr); if (count($missing)>0) muoribene('Configuration file «'.$inifp.'» is missing some required fields: “'.implode('”, “',$missing).'”.',false); return($iniarr); diff --git a/web/mustard/include/sessionstart.php b/web/mustard/include/sessionstart.php index 2c744b6..09999d5 100644 --- a/web/mustard/include/sessionstart.php +++ b/web/mustard/include/sessionstart.php @@ -1,6 +1,6 @@ '.N; $out.=''.N; $out.=''.N; $out.=''.N; $out.=''.N; $out.=''.N; $out.='
Email di invito
'.N; - $out.='
Mittente: '.hspech($iniarr['ref_name']).' '.hspech('<'.$iniarr['ref_email'].'>').'
'.N; if (trim($inst['AdmDisplayName'])!='') $admname=$inst['AdmDisplayName']; elseif (trim($inst['AdmAccount'])!='') @@ -50,69 +72,67 @@ if (array_key_exists('id',$_GET) && preg_match('/^[0-9]+$/',$_GET['id'])===1) { $admname=''; $haddress=$inst['Email']; if ($admname!='') $haddress=$admname.' <'.$haddress.'>'; - $out.='
Destinatario: '.hspech($haddress).'
'.N; - $out.='
Oggetto:
'.N; $madmname=''; if ($admname!='') $madmname=' '.$admname; + if ($admname=='') $admname='Unknown'; $password=randstr(16); define('RN',"\r\n"); - if ($mode=='create') - $message='Hello'.hspech($madmname).','.RN.'we are a little group of italian people who are trying to create a search engine for Mastodon instances.'.RN.'We’d like you to ....'.RN.RN.'Your login data:'.RN.RN.'Username: '.$inst['Email'].RN.'Password: '.hspech($password).RN.RN.'Kind regards'.RN; - else - $message='Hello'.hspech($madmname).','.RN.'we already contacted you ...'; - $out.=''.N; - $out.=''.N; + //('/%guestinsturi/','/%guestname/','/%guestemail/','/%guestpassword/','/%ourdomain/') + $subj=parsetempline($templ[0],array($inst['URI'],$madmname,$inst['Email'],$password,$iniarr['site_domain'])); + $message=''; + for ($i=2; $i').''.N; + $out.='
Destinatario: '.hspech($haddress).'
'.N; + $out.='
Oggetto:
'.N; + $out.=''.N; + $out.=''.N; $out.=''.N; + $out.=''.N; $out.=''.N; - //$out.=''.N; + $out.=''.N; + $out.=''.N; + $out.=''.N; + $out.=''.N; $out.='
'.N; $out.=''.N; -} elseif (array_key_exists('id',$_POST) && preg_match('/^[0-9]+$/',$_POST['id'])===1 && array_key_exists('subject',$_POST) && trim($_POST['subject'])!='' && array_key_exists('message',$_POST) && trim($_POST['message'])!='' && array_key_exists('password',$_POST) && trim($_POST['password'])!='') { + $insturi=$inst['URI']; +} elseif (array_key_exists('id',$_POST) && preg_match('/^[0-9]+$/',$_POST['id'])===1 && array_key_exists('insturi',$_POST) && trim($_POST['insturi'])!='' && array_key_exists('subject',$_POST) && trim($_POST['subject'])!='' && array_key_exists('to',$_POST) && trim($_POST['to'])!='' && array_key_exists('message',$_POST) && trim($_POST['message'])!='' && array_key_exists('password',$_POST) && trim($_POST['password'])!='' && array_key_exists('guestaddr',$_POST) && trim($_POST['guestaddr'])!='' && array_key_exists('createacc',$_POST) && preg_match('/^true|false$/',$_POST['createacc'])===1) { $_POST['id']+=0; - //echo('
'.print_r($_POST,1).'
'.N); - $res=mysqli_query($link,'SELECT * FROM Instances WHERE ID='.$_POST['id']) - or muoribene(__LINE__.': '.mysqli_error($link),true); - if (mysqli_num_rows($res)!=1) - muoribene('Non esiste alcuna istanza con ID='.$_GET['id'],true); - $inst=mysqli_fetch_assoc($res); - if (trim($inst['AdmDisplayName'])!='') { - $admname=$inst['AdmDisplayName']; - $to=$inst['AdmDisplayName']; - } elseif (trim($inst['AdmAccount'])!='') { - $admname=$inst['AdmAccount']; - $to=$inst['AdmAccount']; - } else { - $admname='Unknown'; - $to=''; - } - if (trim($inst['Email'])!='') - if ($to=='') - $to=$inst['Email']; - else - $to.=' <'.$inst['Email'].'>'; - else - muoribene('Nessun indirizzo email è definito per questa istanza.',true); - $to='pezcurrel@tiscali.it'; $from=$iniarr['ref_name'].' <'.$iniarr['ref_email'].'>'; + $to=$_POST['to']; + $dbchange=true; + //questo per far provette d'invio mail senza toccare il db + if ($iniarr['mail_test_address']==false || trim($iniarr['mail_test_address'])=='') { + $to=$iniarr['mail_test_address']; + $dbchange=false; + } $mail=mail($to,'=?utf-8?B?'.base64_encode($_POST['subject']).'?=',wordwrap($_POST['message'],76,"\r\n",false),array('From'=>$from,'Content-Type'=>'text/plain; charset=UTF-8','Content-Transfer-Encoding'=>'8bit')); if (!$mail) { - $out='Non è stato possibile inviare l’email.
Puoi riprovare.'; - } else { - $res=mysqli_query($link,'SELECT * FROM Admins WHERE Email=\''.myesc($link,$inst['Email']).'\'') - or muoribene(__LINE__.': '.mysqli_error($link),true); - if (mysqli_num_rows($res)==0) { - mysqli_query($link,'INSERT INTO Admins (ID, Username, Email, Password, Level, Page, MaxLocalities, MaxLanguages, MaxFinancing, MaxPolicies, MaxTags) VALUES (NULL, \''.myesc($link,$admname).'\', \''.myesc($link,$inst['Email']).'\', \''.myesc($link,password_hash($_POST['password'],PASSWORD_DEFAULT)).'\', \'guest\', \'0\', \'1\', \'0\', \'3\', \'3\', \'3\')') + $out='Errori nell’invio della mail.
Puoi riprovare.'; + } elseif ($dbchange) { + if ($_POST['createacc']=='true') { + mysqli_query($link,'INSERT INTO Admins (ID, Username, Email, Password, Level, Page, MaxLocalities, MaxLanguages, MaxFinancing, MaxPolicies, MaxTags, Enabled) VALUES (NULL, \''.myesc($link,$_POST['guestname']).'\', \''.myesc($link,$_POST['guestaddr']).'\', \''.myesc($link,password_hash($_POST['password'],PASSWORD_DEFAULT)).'\', \'guest\', \'0\', \'1\', \'0\', \'3\', \'3\', \'3\', \'1\')') or muoribene(__LINE__.': '.mysqli_error($link),true); $accid=mysqli_insert_id($link); } else { + $res=mysqli_query($link,'SELECT * FROM Admins WHERE Email=\''.myesc($link,$_POST['guestaddr']).'\'') + or muoribene(__LINE__.': '.mysqli_error($link),true); + if (mysqli_num_rows($res)==0) + muoribene(__LINE__.': Non esiste alcun account con Email=“'.$_POST['guestaddr'].'”.',true); $row=mysqli_fetch_assoc($res); $accid=$row['ID']; } mysqli_query($link,'UPDATE Instances SET GuestID='.$accid.' WHERE ID='.$_POST['id']) or muoribene(__LINE__.': '.mysqli_error($link),true); + $out='TUTT’OCCHEI!'; + } else { + $out='La mail è stata inviata correttamente all’indirizzo di test definito nella configurazione, «'.$to.'».
Nessuna modifica è stata apportata al database.'; } + $insturi=$_POST['insturi']; } else { muoribene('Malformed input.',true); } @@ -123,7 +143,7 @@ mysqli_close($link); -Mustard - Invito admin di «<?php echo(hspech($inst['URI'])); ?>» +Mustard - Invito admin di «<?php echo(hspech($insturi)); ?>» @@ -157,7 +177,7 @@ function send() { -
Invito admin di «»
+
Invito admin di «»
diff --git a/web/mustard/login.php b/web/mustard/login.php index 4545d44..074436c 100644 --- a/web/mustard/login.php +++ b/web/mustard/login.php @@ -27,8 +27,10 @@ if (mysqli_num_rows($res)>1) $row=mysqli_fetch_assoc($res); if (mysqli_num_rows($res)<1 || !password_verify($_POST['password'],$row['Password'])) muoribene('Unknown email or wrong password.
'.$btl,false); +if ($row['Enabled']==0) + muoribene('Your account is not enabled.
'.$btl,false); -session_name('mastostartadmin'); +session_name('mustard'); session_start(); $_SESSION['AdmID']=$row['ID']; diff --git a/web/mustard/logout.php b/web/mustard/logout.php index 292a181..423f760 100644 --- a/web/mustard/logout.php +++ b/web/mustard/logout.php @@ -1,6 +1,6 @@ '.N,1); -$iniarr=parse_ini_file('../sec/mastostartadmin.ini') +$iniarr=parse_ini_file('../sec/mustard.ini') or mexit('Impossibile aprire il file di configurazione.'.N,1); $link=mysqli_connect($iniarr['db_host'],$iniarr['db_admin_name'],$iniarr['db_admin_password'],$iniarr['db_name'],$iniarr['db_port'],$iniarr['db_socket']) or mexit('Impossibile connettersi al database: '.mysqli_connect_error().' ['.mysqli_connect_errno().']'.N,1); diff --git a/web/mustard/tools/popudb.php b/web/mustard/tools/popudb.php index 5534915..fbfec13 100755 --- a/web/mustard/tools/popudb.php +++ b/web/mustard/tools/popudb.php @@ -22,7 +22,7 @@ define('N',"\n"); use function mysqli_real_escape_string as myesc; -$inifp=__DIR__.'/../sec/mastostartadmin.ini'; +$inifp=__DIR__.'/../sec/mustard.ini'; $iniarr=@parse_ini_file($inifp) or mexit('Impossibile aprire il file di configurazione «'.$inifp.'»'.N,1); $link=@mysqli_connect($iniarr['db_host'],$iniarr['db_admin_name'],$iniarr['db_admin_password'],$iniarr['db_name'],$iniarr['db_port'],$iniarr['db_socket']) diff --git a/web/mustard/zzz-materiali/icona.svg b/web/mustard/zzz-materiali/icona.svg new file mode 100644 index 0000000..43c18a0 --- /dev/null +++ b/web/mustard/zzz-materiali/icona.svg @@ -0,0 +1,71 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/web/mustard/zzz-materiali/mastostart_struttura.sql.gz b/web/mustard/zzz-materiali/mastostart_struttura.sql.gz index 553f3cc..3bb9a45 100644 Binary files a/web/mustard/zzz-materiali/mastostart_struttura.sql.gz and b/web/mustard/zzz-materiali/mastostart_struttura.sql.gz differ diff --git a/web/mustard/zzz-materiali/mastostart_struttura_e_dati.sql.gz b/web/mustard/zzz-materiali/mastostart_struttura_e_dati.sql.gz deleted file mode 100644 index c870f13..0000000 Binary files a/web/mustard/zzz-materiali/mastostart_struttura_e_dati.sql.gz and /dev/null differ diff --git a/web/mustard/zzz-materiali/mastostart_struttura_e_dati_pro_installazione.sql.gz b/web/mustard/zzz-materiali/mastostart_struttura_e_dati_pro_installazione.sql.gz new file mode 100644 index 0000000..efa9fbc Binary files /dev/null and b/web/mustard/zzz-materiali/mastostart_struttura_e_dati_pro_installazione.sql.gz differ