Visualizzazione post con etichetta asp. Mostra tutti i post
Visualizzazione post con etichetta asp. Mostra tutti i post

venerdì 7 giugno 2019

Leggi il post

Risolvere problema accentate negli ics calendar (ASP)

L'altro giorno ho fatto una breve guida su come creare un ics in asp/php, grazie alla quale ho potuto aggiungere questa interessante funzionalità ad un sito internet.
Sembrava funzionare tutto alla perfezione, ma alla fine ho scoperto un antipatico bugs con le accentate sull'ics.
Praticamente, la prima volta che ho utilizzato la mia bella pagina asp per generare un ics, nel titolo dell'evento c'era un'accentata, che in fase di import del file calendar in outlook ha dato come risultato di avere una lettera in meno nel titolo.

Subito allarmato dalla sparizione della lettera accentata, ho aperto il file ics con il blocco note (notepad++ in realtà), ed ho notato che in realtà l'accentata era scritta correttamente.
Andando però a guardare il formato del file, ho visto che il charset indicato era ANSI, ed ho subito intuito che in realtà microsoft outlook avrebbe gradito un charset diverso, ovvero il più universale utf8.

Vediamo quindi come risolvere questo problemino con l'ics e le accentate non visualizzate in outlook.



Come risolvere il problema delle accentate nei file ics calendar in ASP


Premessa: la seguente soluzione, anche se ovviamente con sintassi diversa a seconda del linguaggio di programmazione utilizzato, può risolvere in maniera generale il problema accentate ics outlook (ed altri client ovviamente).

Per fixare il bug delle accentate nell'apertura dei file calendar ics con outlook o altri client di posta, basta agire sulla pagina asp ed impostare come charset utf-8.

Bisogna dunque aggiungere all'inizio del file asp, prima di ogni cosa, queste due righe:

<%
@LANGUAGE="VBSCRIPT" CODEPAGE="65001"
Response.CharSet = "UTF-8"
%>

Successivamente per completezza, ma potrebbe non servire, si può aggiungere all'interno del file ics la riga con la specifica del charset usato, che in questo caso è:

CHARSET:UTF-8
Quindi rifacendomi all'esempio dell'altro giorno, lo script finale verrebbe così:

<%
@LANGUAGE="VBSCRIPT" CODEPAGE="65001"
Response.CharSet = "UTF-8"

response.buffer=true
Response.ContentType = "text/calendar"
response.AddHeader"content-disposition","inline;filename=appuntamento.ics"
ris="BEGIN:VCALENDAR"
ris=ris&VBcrlf&"CHARSET:UTF-8"
ris=ris&VBcrlf&"VERSION:2.0"
ris=ris&VBcrlf&"BEGIN:VEVENT"
ris=ris&VBcrlf&"DTSTART;TZID="&stato&"/"&citta&":"&dataorainizioo
ris=ris&VBcrlf&"DTEND;TZID=Italia/Milano:"&dataorafine
ris=ris&VBcrlf&"SUMMARY:"&titolo
ris=ris&VBcrlf&"LOCATION:"&luogo
ris=ris&VBcrlf&"DESCRIPTION:"&titolo&VBcrlf&descrizione
ris=ris&VBcrlf&"PRIORITY:3"
ris=ris&VBcrlf&"END:VEVENT"
ris=ris&VBcrlf&"END:VCALENDAR"
response.write(ris)
%>


Ed ecco che magicamente tutte le accentate ed i caratteri speciali presenti nel file ics calendar generato dalla pagina asp, si apriranno tranquillamente anche su outlook.

giovedì 6 giugno 2019

Leggi il post

Creare un ICS Calendar in ASP o PHP

Oggi farò una guida multi language, che spiega come creare un file ics calendar, ovvero quel tipo di file che i vari client di posta, quali outlook ad esempio, interpretano come un memo da mettere in agenda.
I file ics sono molto comodi per salvarsi nel proprio calendario personale i dati di un appuntamento, in modo tale da potersi anche far avvisare poco prima dell'incontro con una notifica su cellulare.
Un buon sito web che si rispetti dunque, che sia sviluppato in asp o php, a seguito dell'iscrizione ad un evento da la possibilità di creare un file ics da scaricare o da mandare in automatico via email all'iscritto.
Tale file poi, una volta aperto fa partire, ad esempio, outlook in automatico, il quale chiederà all'utente se vuole salvarsi i dati dell'appuntamento presenti nel file calendar, facilitando di fatto la vita a chi si iscrive ad un evento, che non deve scriversi a mano il titolo dell'appuntamento, la data e ora, ed il luogo dell'incontro.

Fatta questa doverosa premessa, vediamo subito come creare un file ics con asp e php.


Come creare un ICS Calendar in ASP


La sintassi da utilizzare per creare un file calendar in asp classic (e non) è la seguente:

<%
response.buffer=true
Response.ContentType = "text/calendar"
response.AddHeader"content-disposition","inline;filename=appuntamento.ics"
ris="BEGIN:VCALENDAR"
ris=ris&VBcrlf&"VERSION:2.0"
ris=ris&VBcrlf&"BEGIN:VEVENT"
ris=ris&VBcrlf&"DTSTART;TZID="&stato&"/"&citta&":"&dataorainizioo
ris=ris&VBcrlf&"DTEND;TZID=Italia/Milano:"&dataorafine
ris=ris&VBcrlf&"SUMMARY:"&titolo
ris=ris&VBcrlf&"LOCATION:"&luogo
ris=ris&VBcrlf&"DESCRIPTION:"&titolo&VBcrlf&descrizione
ris=ris&VBcrlf&"PRIORITY:3"
ris=ris&VBcrlf&"END:VEVENT"
ris=ris&VBcrlf&"END:VCALENDAR"
response.write(ris)
%>


Direi che questo script non necessita di particolari spiegazioni, in quanto basterà sostituire dinamicamente le varie variabili quali luogo, ora, ecc... per avere una pagina asp che una volta chiamata consentirà al visitatore di scaricare un file calendar ics.


Come creare un file Calendar ics in PHP


Per poter creare un file ics in php, facendolo scaricare dall'utente tramite apposito link, basta utilizzare il seguente script:

<?
header('Content-Type: text/csv; text/calendar');
header('Content-Disposition: attachment; filename=calendar.ics');
$dstartc=date("Y", strtotime($data_inizio)).date("m", strtotime($data_inizio)).date("d", strtotime($data_inizio))."T".date("H", strtotime($data_inizio)).date("i", strtotime($data_inizio))."00";
$dendc=date("Y", strtotime($data_fine)).date("m", strtotime($data_fine)).date("d", strtotime($data_fine))."T".date("H", strtotime($data_fine)).date("i", strtotime($data_fine))."00";
$ris="BEGIN:VCALENDAR\n";
$ris.="VERSION:2.0\n";
$ris.="BEGIN:VEVENT\n";
$ris.="DTSTART;TZID=".$stato."/".$citta.":".$dstartc."\n";
$ris.="DTEND;TZID=".$stato."/".$citta.":".$dendc."\n";
$ris.="SUMMARY:".$titolo."\n";
if ($luogo!="") $ris.="LOCATION:".$luogo."\n";
$ris.="DESCRIPTION:".$titolo."\n".$descrizione."\n";
$ris.="PRIORITY:3\n";
$ris.="END:VEVENT\n";
$ris.="END:VCALENDAR\n";
echo $ris;
?>


Come per la versione asp, si produrrà un output con una sintassi prestabilita standard (che non è il caso di analizzare e va presa per buona), alla quale dovremo passare le varie variabili che compongono i dati del nostro appuntamento (luogo, data, titolo evento, ecc...).

Nello script d'esempio viene anche illustrato come l'ics si aspetta che sia formattata la data, sintassi che ovviamente vale anche per la versione asp.

Bene, è tutto.
Grazie a queste poche righe di codice, che potrete ovviamente standardizzare in una funzione, potrete creare file ics calendar tramite linguaggio di programmazione php o asp, ed inserire così una comoda funzionalità all'interno dei vostri siti internet.

mercoledì 23 novembre 2016

Leggi il post

Come cambiare il formato della data del server con ASP Classic

Il titolo di questo post non è propriamente corretto, dato che non si tratta veramente di andare a modificare la data del server con una pagina asp classic.
In realtà, quello che andremo a fare con il comando asp che vi sto per spiegare, è modificare in visualizzazione il formato della data di tutte le pagine del nostro sito.


Come cambiare il formato della data del server con ASP Classic


Per poter cambiare il formato della data che viene visualizzato nelle pagine asp ospitate su un server con ad esempio la data americana, basta aggiungere nelle pagine asp il seguente comando:

Session.LCID = 1040

Così facendo, andremo a cambiare il formato della data che viene visualizzato nella pagina asp, dal formato americano (mm/gg/aaaa) a quello italiano (gg/mm/aaaa).

Ad esempio invece, se volessimo impostare la data in formato americano nel nostro sito asp classic, dovremmo usare: Session.LCID = 2048

Una differenza che salta subito all'occhio dall'americano all'italiano, è che nella data in formato americano le ore sono indicate con il formato breve, es. 7pm VS le 19 dell'ora italiana.

Usare questa funzionalità dell'asp può tornare molto utile nel caso si voglia modificare il formato delle date delle applicazioni asp, senza però dover modificare le impostazioni del server.
A me è capitato proprio di recente, di ritrovarmi con un server configurato con la lingua americana, ma con diverse applicazioni già online, quindi poter agire sul codice delle nuove app con LCID, senza toccare il server, è stata la soluzione migliore.

lunedì 21 novembre 2016

Leggi il post

Come passare un indirizzo via url con ASP Classic

Anche con l'asp classic è ovviamente possibile usare l'urlencode.
La funzione urlencode ci consente di cifrare una stringa da passare via url, in modo che non dia problemi se passata tramite GET o POST.

Se ad esempio vogliamo passare via url una variabile che contiene un indirizzo internet che al suo interno ha già ha delle variabili passate nell'url, occorre encodare la stringa in modo da non avere problemi.

Ecco la funzione asp classic per encodare un url:

server.URLEncode(url-da-codificare)

Grazie a urlencode infatti, ad esempio, questa stringa:
corso.asp?id=54
diventerà:
corso%2Easp%3Fid%3D54

E potrà essere passata tranquillamente via codice.

A quanto vedo però, non esiste in asp classic una funzione urldecode, anche perchè in teoria non serve nel caso in cui si voglia poi fare una redirect all'url codificato.
Ma nessuno ci vieta di crearcene una noi usando i replace :)
Leggi il post

Come recuperare la pagina di provenienza in ASP Classic

Se hai un sito sviluppato in asp classic, forse ti interesserà sapere come individuare l'url di provenienza dei visitatori ad una pagina del tuo sito internet.

L'indirizzo di provenienza, più comunemente detto referral, è un dato importante per le statistiche web, ma potrebbe anche tornare utile per fare dei redirect mirati dopo una login, ad esempio.

Come recuperare la pagina di provenienza in ASP Classic


Per scoprire l'indirizzo di provenienza di un visitatore usando l'asp classic, la funzione da usare è la seguente:

Request.Servervariables("HTTP_REFERER")

Stampando a video il risultato ottenuto con questo metodo, riceveremo l'url da cui un visitatore è finito sulla pagina in cui abbiamo messo questo script.
E' tutto :)

martedì 15 novembre 2016

Leggi il post

Come criptare / decriptare una password in ASP classic

Se stai sviluppando un'area riservata in asp classic, magari con salvataggio delle password nel database, è cosa buona e giusta non salvare mai le password in chiaro.
Online si trovano diversi modi per criptare una password per metterla al sicuro da occhi indiscreti, ed ovviamente si trovano anche script per decriptare password sempre tramite asp... vediamone subito uno.


Come criptare / decriptare una password in ASP classic


Se vuoi cifrare una password in modo che sia illeggibile in caso il tuo database venga violato, ho una funzione asp che fa al caso tuo:

<%
Function criptapwd(pwd)
    chiavi=mid("<87?@/](76O,V$)HV.:RNPE'@IBC?#L:*@&,5LCSB*8'F4[=J]QU,NTZ:X`E`BZF]TVHJG'77/=]OE\XZB\K>843VN[",1,100)
    stringacript=""
    for i=1 to len(pwd)
        caratteri=Asc(mid(chiavi,i,1))
        stringa=Asc(mid(pwd,i,1))
        charcript=caratteriXor stringa
        stringacript=stringacript&Chr(charcript)
    next
    criptapwd=stringacript
End Function

%>

Con questa semplice funzione potremo criptare una password o una stringa di testo in generale, in maniera artigianale ma sicura da occhi indiscreti.

Per cifrare la password "Verde" ad esempio, potremmo scrivere così per vedere a video il risultato:
response.write criptapwd("Verde")

La password "Verde" verrà tramutata in questa indecifrabile stringa: j]E[%

Ma se volessimo decriptare la password appena mascherata in asp?
Semplice, ci basterebbe utilizzare questa funzione di decriptazione asp:

Function decriptapwd(pwd)
    chiavi=mid("<87?@/](76O,V$)HV.:RNPE'@IBC?#L:*@&,5LCSB*8'F4[=J]QU,NTZ:X`E`BZF]TVHJG'77/=]OE\XZB\K>843VN[",1,100)
    stringadecript=""
    for i=1 to Len(pwd)
        caratteri=(Asc(mid(chiavi,i,1)))
        stringa=Asc(mid(pwd,i,1))
        chardecript=caratteri Xor stringa
        stringadecript=stringadecript&Chr(chardecript)
    next
    decriptapwd=stringadecript
End Function


Se infatti volessimo riottenere la password "Verde", ci basterebbe incollare il codice criptato in precedenza, in questo modo:
response.write "<br>"&decriptapwd("j]E[%")

Avremo così decriptato la password criptate in precedenza, in modo da poterla leggere di nuovo in chiaro.

PS Ovviamente un algoritmo di criptaggio password serio non è decriptabile, tuttavia questa soluzione amatoriale va benissimo per lavori non troppo delicati, o per siti che non contengono dati troppo sensibili (es. carte di credito).
Leggi il post

Login LDAP Active directory con ASP Classic

Per gli amanti dell'asp classic, ho qui uno script che consente di fare la login tramite ldap active directory.
Grazie a questo semplice script infatti, sarà possibile verificare l'accesso su un database ldap, passandogli username (l'utente di rete dell'active directory ad esempio) e password.

Ecco quindi il codice asp con la funzione da utilizzare nelle vostre pagine web:

<%
function loginldap(username,password,dominio)
    loginldap=False
    query="SELECT cn FROM 'LDAP://"&dominio&"' WHERE objectClass='*'"
    set conn=server.CreateObject("ADODB.Connection")
    conn.Provider="ADsDSOOBJECT"
    conn.properties("User ID")=username
    conn.properties("Password")=password
    conn.properties("Encrypt Password")=true
    conn.open "DS Query",username,password
    set cmd=server.CreateObject("ADODB.Command")
    set cmd.ActiveConnection=conn
    cmd.CommandText=query
    on error resume next
    set rs=cmd.Execute
    if rs.bof or rs.eof then
        loginldap=False
    else
        loginldap=True
    end if
    set rs=nothing
    set conn=nothing
    on error goto 0
end function

%>

Per far funzionare il tutto, basterà creare una form di login che passerà username e password alla funzione, richiamandola ad esempio in questo modo:

response.write loginldap(utente-di-rete,password,indirizzo-ip-server)

La funzione loginldap restituirà TRUE in caso la userid e la password siano corrette, o FALSE in tutti gli altri casi (anche nel caso in cui il server non sia raggiungibile).
Potrete quindi intercettare il risultato e gestire di conseguenza la pagina web, magari salvando in una sessione l'avvenuta autenticazione ldap tramite pagina asp.

Attenzione: tra i vari problemi che si potrebbero riscontrare con questa asp ldap connection, ci potrebbe anche essere l'errore "Server not Operational".
A me è capitato su un server in cui un firewall bloccava la chiamata, ma potrebbe anche essere un errore di cattiva risoluzione del netbios, o di cattiva risoluzione del dns.