This commit is contained in:
pezcurrel 2020-05-08 17:38:54 +02:00
parent 1697d37943
commit 1ae0e3c71b
24 changed files with 237 additions and 80 deletions

2
.gitignore vendored
View file

@ -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

View file

@ -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».

4
web/mustard/crawler/crawl.sh Executable file
View file

@ -0,0 +1,4 @@
#!/bin/sh
BASEDIR=$(dirname $0)
cd "$BASEDIR"
php peerscrawl.php && php crawler.php

View file

@ -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'])

View file

@ -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

View file

@ -87,11 +87,11 @@ function dispinst(&$row,&$cols,&$link,&$dlang,&$account,$showcount,$finst,$cinst
$out.='<tr><td colspan="2"><input type="button" value="Edita" class="btbut" onclick="document.location.href=\'edinst.php?id='.$row['IID'].'\'"></td></tr>'.N;
if ($account['Level']!='guest') {
if (!is_null($row['GuestID'])) {
$out.='<tr><td colspan="2"><input type="button" value="Admin già invitate" class="btbut" disabled></td></tr>'.N;
$out.='<tr><td colspan="2"><input type="button" value="Sollecita, stimola, incalza, incita admin già invitat*" class="btbut" onclick="document.location.href=\'invite.php?id='.$row['IID'].'\'"></td></tr>'.N;
} elseif (trim($row['Email'])=='') {
$out.='<tr><td colspan="2"><input type="button" value="Impossibile invitare: lindirizzo e-mail non è definito" class="btbut" disabled></td></tr>'.N;
$out.='<tr><td colspan="2"><input type="button" value="Impossibile invitare admin: indirizzo e-mail non definito" class="btbut" disabled></td></tr>'.N;
} else {
$out.='<tr><td colspan="2"><input type="button" value="Invita le admin" class="btbut" onclick="document.location.href=\'invite.php?id='.$row['IID'].'\'"></td></tr>'.N;
$out.='<tr><td colspan="2"><input type="button" value="Invita admin" class="btbut" onclick="document.location.href=\'invite.php?id='.$row['IID'].'\'"></td></tr>'.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);

View file

@ -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('Theres no account with ID='.$_SESSION['AdmID'].'.',true);
}
?>

View file

@ -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('Couldnt 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);

View file

@ -1,6 +1,6 @@
<?php
session_name('mastostartadmin');
session_name('mustard');
session_start();
if (!array_key_exists('AdmID',$_SESSION) || preg_match('/^[0-9]+$/',$_SESSION['AdmID'])!==1) {
$_SESSION=array();

View file

@ -24,6 +24,11 @@ function hspech($str) {
require('include/randstr.php');
function parsetempline($line,$substarr) {
$patterns=array('/%guestinsturi/','/%guestname/','/%guestemail/','/%guestpassword/','/%ourdomain/');
return(preg_replace($patterns,$substarr,$line));
}
if (array_key_exists('id',$_GET) && preg_match('/^[0-9]+$/',$_GET['id'])===1) {
$_GET['id']+=0;
$res=mysqli_query($link,'SELECT * FROM Instances WHERE ID='.$_GET['id'])
@ -33,15 +38,32 @@ if (array_key_exists('id',$_GET) && preg_match('/^[0-9]+$/',$_GET['id'])===1) {
$inst=mysqli_fetch_assoc($res);
if (trim($inst['Email'])=='')
muoribene('Nessun indirizzo email è definito per questa istanza.',true);
$res=mysqli_query($link,'SELECT * FROM Admins WHERE Email=\''.myesc($link,$inst['Email']).'\'')
or muoribene(__LINE__.': '.mysqli_error($link),true);
(mysqli_num_rows($res)==0) ? $mode='create' : $mode='update';
$createacc='false';
if (!is_null($inst['GuestID'])) {
$res=mysqli_query($link,'SELECT * FROM Admins WHERE ID='.$inst['GuestID'])
or muoribene(__LINE__.': '.mysqli_error($link),true);
if (mysqli_num_rows($res)==0)
muoribene('Non esiste alcun account con ID='.$inst['GuestID'].'.',true);
$templfp='mailtemplates/reminder';
} 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) {
$templfp='mailtemplates/first_invitation';
$createacc='true';
} else {
$templfp='mailtemplates/more_instances';
}
}
$templ=file($templfp,FILE_IGNORE_NEW_LINES);
if ($templ===false)
muoribene('Impossibile aprire «'.$templfp.'».',true);
$out='<form action="invite.php" method="post" id="f" onsubmit="return send();">'.N;
$out.='<table class="bigtab">'.N;
$out.='<tbody>'.N;
$out.='<tr><td class="insthead">Email di invito</td></tr>'.N;
$out.='<tr><td>'.N;
$out.='<div class="mailheader"><strong>Mittente:</strong> '.hspech($iniarr['ref_name']).' '.hspech('<'.$iniarr['ref_email'].'>').'</div>'.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.='<div class="mailheader"><strong>Destinatario:</strong> '.hspech($haddress).'</div>'.N;
$out.='<div class="mailheader"><strong>Oggetto:</strong> <input type="text" id="subject" name="subject" class="mailsubj" value="'.hspech($inst['URI']).' in our search engine"></div>'.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.'Wed 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.='<textarea id="message" name="message" rows="20" class="mailmsg">'.$message.'</textarea>'.N;
$out.='<input type="button" value="Crea laccount e invia la mail di invito" class="mailbut" onclick="send();">'.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<count($templ); $i++)
$message.=parsetempline($templ[$i],array($inst['URI'],$madmname,$inst['Email'],$password,$iniarr['site_domain'])).RN;
$out.='<div class="mailheader"><strong>Mittente:</strong> '.hspech($iniarr['ref_name']).' '.hspech('<'.$iniarr['ref_email'].'>').'</div>'.N;
$out.='<div class="mailheader"><strong>Destinatario:</strong> '.hspech($haddress).'</div>'.N;
$out.='<div class="mailheader"><strong>Oggetto:</strong> <input type="text" id="subject" name="subject" class="mailsubj" value="'.hspech($subj).'"></div>'.N;
$out.='<textarea id="message" name="message" rows="20" class="mailmsg">'.hspech($message).'</textarea>'.N;
$out.='<input type="button" value="Invia" class="mailbut" onclick="send();">'.N;
$out.='<input type="hidden" name="id" value="'.$inst['ID'].'">'.N;
$out.='<input type="hidden" name="insturi" value="'.hspech($inst['URI']).'">'.N;
$out.='<input type="hidden" name="password" value="'.hspech($password).'">'.N;
//$out.='<input type="hidden" name="mode" value="'.$mode.'">'.N;
$out.='<input type="hidden" name="to" value="'.hspech($haddress).'">'.N;
$out.='<input type="hidden" name="guestname" value="'.hspech($admname).'">'.N;
$out.='<input type="hidden" name="guestaddr" value="'.hspech($inst['Email']).'">'.N;
$out.='<input type="hidden" name="createacc" value="'.$createacc.'">'.N;
$out.='</td></tr>'.N;
$out.='</tbody>'.N;
$out.='</table>'.N;
$out.='</form>'.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('<pre>'.print_r($_POST,1).'</pre>'.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 lemail.<br>Puoi <a href="invite.php?id='.$inst['ID'].'">riprovare</a>.';
} 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 nellinvio della mail.<br>Puoi <a href="invite.php?id='.$_POST['id'].'">riprovare</a>.';
} 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='TUTTOCCHEI!';
} else {
$out='La mail è stata inviata correttamente allindirizzo di test definito nella configurazione, «'.$to.'».<br>Nessuna modifica è stata apportata al database.';
}
$insturi=$_POST['insturi'];
} else {
muoribene('Malformed input.',true);
}
@ -123,7 +143,7 @@ mysqli_close($link);
<!DOCTYPE HTML>
<html lang="it">
<head>
<title>Mustard - Invito admin di «<?php echo(hspech($inst['URI'])); ?>»</title>
<title>Mustard - Invito admin di «<?php echo(hspech($insturi)); ?>»</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Admin pages for Mastodon Startpage">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
@ -157,7 +177,7 @@ function send() {
<ul>
<?php echo($menuout); ?>
</ul>
<div class="mtit">Invito admin di «<?php echo(hspech($inst['URI'])); ?>»</div>
<div class="mtit">Invito admin di «<?php echo(hspech($insturi)); ?>»</div>
<div id="rightdiv">
<img src="imgs/esci.svg" class="rlinks" title="Esci" onclick="document.location.href='logout.php';">
</div>

View file

@ -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.<br>'.$btl,false);
if ($row['Enabled']==0)
muoribene('Your account is not enabled.<br>'.$btl,false);
session_name('mastostartadmin');
session_name('mustard');
session_start();
$_SESSION['AdmID']=$row['ID'];

View file

@ -1,6 +1,6 @@
<?php
session_name('mastostartadmin');
session_name('mustard');
session_start();
$_SESSION=array();
session_destroy();

View file

@ -0,0 +1,12 @@
%guestinsturi in our search engine
Hello%guestname,
we are a little group of italian people who are trying to create a search engine for Mastodon instances.
Wed like you to ....
Your login data:
Email: %guestemail
Password: %guestpassword
Kind regards

View file

@ -0,0 +1,7 @@
%guestinsturi in our search engine
Hello%guestname,
we just want to inform you that we added your %guestinsturi instance to the list of instances you can edit infos for from your %guestemail account at https://%ourdomain/mustard :-)
Kind regards,
the mastostart team

View file

@ -0,0 +1,7 @@
%guestinsturi in our search engine
Hello%guestname,
we just want to remind you that your %guestemail account at https://%ourdomain/mustard is waiting for you to fill in the info about your %guestinsturi instance! :-)
Kind regards,
the mastostart team

View file

@ -1,8 +0,0 @@
db_host=localhost
db_port=3306
db_socket=/run/mysqld/mysqld.sock
db_name=mastostart
db_admin_name=MastoStartAdmin
db_admin_password=MastoStartAdmin
ref_name=Mastodon Startpage
ref_email=qodobop@inventati.org

View file

@ -0,0 +1,24 @@
db_host=localhost
db_port=3306
db_socket=/run/mysqld/mysqld.sock
db_name=mastostart
db_admin_name=MastoStartAdmin
db_admin_password=MastoStartAdmin
;; questo qui sotto è il nome di riferimento di mastostart, al momento
;; viene usato solo nell'invio delle mail di invito
ref_name=Mastodon Startpage
;; questo qui sotto è l'indirizzo email di contatto di mastostart,
;; al momento viene usato solo nell'invio delle mail di invito
ref_email=qodobop@inventati.org
;; questo qui sotto è il dominio di riferimento di mastostart, al momento
;; viene usato solo nell'invio delle mail di invito
site_domain=mastodon.help
;; questo qui sotto funziona così: se lasciato vuoto o impostato a "false"
;; o a "no", le mail di invito verranno effettivamente inviate all'indirizzo
;; di contatto dell'istanza; se impostato, le mail di invito verranno
;; inviate invece all'indirizzo specificato qui e non verrà apportata
;; alcuna modifica al database (niente creazione account "guest", niente
;; associazione dell'istanza all'account creato).
;; può essere utile impostarlo a un proprio indirizzo mail per testare
;; che il sistema di invio posta funzioni, eventualmente.
mail_test_address=pezcurrel@tiscali.it

View file

@ -26,7 +26,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'])

View file

@ -1,4 +1,4 @@
#!/bin/php
#!/usr/bin/php
<?php
define('N',"\n");
@ -13,7 +13,7 @@ function mexit($msg,$code) {
if ($argc!=4)
mexit('addsuperadmin.php <username> <email> <password>'.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);

View file

@ -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'])

View file

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
viewBox="0 0 135.46666 135.46667"
version="1.1"
id="svg8"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
sodipodi:docname="icona.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="217.83103"
inkscape:cy="232.46478"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:snap-page="true"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:window-width="3840"
inkscape:window-height="2037"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Livello 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-161.53331)">
<path
style="fill:#000000;stroke-width:0.60455555"
inkscape:connector-curvature="0"
d="m 132.58283,242.7442 c -1.99133,9.55598 -17.83516,20.01408 -36.031803,22.04088 -9.488764,1.0561 -18.831211,2.02679 -28.793355,1.60056 -16.292162,-0.69628 -29.147806,-3.62736 -29.147806,-3.62736 0,1.47941 0.09781,2.88803 0.293419,4.20541 2.11809,14.99778 15.943189,15.89623 29.039044,16.31517 13.217918,0.42185 24.987523,-3.03984 24.987523,-3.03984 l 0.543019,11.14633 c 0,0 -9.245422,4.63092 -25.715199,5.48265 -9.081891,0.46567 -20.358551,-0.21311 -33.492748,-3.45585 C 5.7790714,286.37929 0.88015717,258.05582 0.13057087,229.31707 -0.09790411,220.78436 0.042939,212.73843 0.042939,206.00917 c 0,-29.38685 20.641795,-38.0006 20.641795,-38.0006 10.408143,-4.45868 28.267551,-6.33367 46.834294,-6.47526 h 0.456167 c 18.566742,0.14151 36.437885,2.01658 46.845245,6.47526 0,0 20.64103,8.61375 20.64103,38.0006 0,0 0.25899,21.68178 -2.87864,36.73503"
id="path1428" />
<path
style="fill:#ffd42a;stroke-width:0.60455555"
inkscape:connector-curvature="0"
d="m 111.11398,208.28895 v 35.58258 H 96.000965 v -34.5367 c 0,-7.2803 -3.28394,-10.97554 -9.852602,-10.97554 -7.262697,0 -10.902651,4.38349 -10.902651,13.05125 V 230.3145 H 60.221901 v -18.90396 c 0,-8.66776 -3.640737,-13.05125 -10.903432,-13.05125 -6.568664,0 -9.852603,3.69524 -9.852603,10.97554 v 34.5367 H 24.352855 v -35.58258 c 0,-7.27227 1.985076,-13.05125 5.972437,-17.32675 4.111771,-4.27549 9.496588,-6.46724 16.181053,-6.46724 7.733731,0 13.590365,2.77272 17.462707,8.31888 l 3.764364,5.88627 3.765145,-5.88627 c 3.871561,-5.54616 9.728194,-8.31888 17.462708,-8.31888 6.683683,0 12.068501,2.19175 16.181051,6.46724 3.98658,4.2755 5.97166,10.05448 5.97166,17.32675"
id="path1430" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB