Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών: Web εφαρμογή με χρήση LDAP και SMTP Server Πανεπιστήμιο Πελοποννήσου Τμήμα Επιστήμης & Τεχνολογίας Τηλεπικοινωνιών Ευάγγελος Α. Κοσμάτος
Αρχιτεκτονική εφαρμογής Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 2
Σελίδα index.html Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 3
Βασικά στοιχεία σελίδας index.html (1) Τίτλος σελίδας <title>login Page cnms1.com</title> Τίτλος μέσα στη σελίδα <h1>cnms1.com - Login Page</h1> Δημιουργία φόρμας που θα στέλνει τα περιεχόμενά της στη σελίδα ldap.php μέσω της μεθόδου post <form action='ldap.php' method=post> Κενό κελί στη φόρμα για συμπλήρωση από τον χρήστη το username <input type ='text' name='username'></input> Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 4
Βασικά στοιχεία σελίδας index.html (2) Κενό κελί στη φόρμα για συμπλήρωση από τον χρήστη το password <input type ='password' name='password'></input> Προσθήκη κουμπιού για την υποβολή της φόρμας <input type='submit' value='submit'> Προσθήκη κουμπιού για τον καθαρισμό της φόρμας <input type='reset' value='reset'> Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 5
Παράθεση index.html <html> <head> <title>login Page - cnms1.com</title> </head> <body> <h1>cnms1.com - Login Page</h1> <form action='ldap.php' method=post> <table border='0' cellspacing='0' cellpadding='0' align=center> <tr> <td align='center'>username</td> <td align='center'> <input type ='text' name='username'></input> </td> </tr> <tr> <td align='center'>password</td> <td align='center'> <input type ='password' name='password'></input> </td> </tr> <tr><td></td><td> <input type='submit' value='submit'> <input type='reset' value='reset'> </td></tr> </table> </form> </body> </html> Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 6
Σελίδα ldap.php Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 7
LDAP schema Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 8
Βασικά στοιχεία σελίδας ldap.php (1) Μεταβλητές του LDAP $ldap['user'] = $_POST["username"]; $ldap['userpass'] = $_POST["password"]; $ldap['host'] = "localhost"; $ldap['port'] = 389; $ldap['dn'] = "uid=".$ldap['user'].",ou=people,dc=corelab"; $ldap['base'] = "dc=corelab"; Σύνδεση με τον LDAP $ldap['conn'] = ldap_connect( $ldap['host'], $ldap['port'] ) or die("could not connect to server {$ldap['host']}" ); Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 9
Βασικά στοιχεία σελίδας ldap.php (2) BIND στον LDAP $ldap['bind'] = ldap_bind( $ldap['conn'], $ldap['dn'], $ldap['userpass']); Αναζήτηση χρήση στον LDAP $ldap['result'] = ldap_search( $ldap['conn'], $ldap['base'], 'uid='.$ldap['user'] ); Ανάκτηση των πληροφοριών του αποτελέσματος της αναζήτησης $ldap['info'] = ldap_get_entries( $ldap['conn'], $ldap['result'] ); Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 10
Βασικά στοιχεία σελίδας ldap.php (3) Προσθήκη πληροφοριών στη σύνοδο $_SESSION['uid'] = $ldap['info'][0]['uid'][0]; Παρουσίαση πληροφοριών π.χ. εμφάνιση του uid που είναι αποθηκευμένο στον LDAP Server uid: <?php echo $ldap['info'][0]["uid"][0]?> Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 11
Βασικά στοιχεία σελίδας ldap.php (4) Δημιουργία φόρμας που θα στέλνει τα περιεχόμενά της στη σελίδα contact.php μέσω της μεθόδου post <form method="post" action="contact.php"> Επιλογή παραλήπτη <select name="sendto"> <option value="fmaster@cnmslab.uop.gr">user</option> <option value="vagelis@cnmslab.uop.gr">administrator</option> Όνομα και email (στοιχεία φόρμας) <input size=25 name="name"> <input size=25 name="email"> Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 12
Βασικά στοιχεία σελίδας ldap.php (5) Κυρίως μήνυμα (στοιχείο φόρμας) <textarea name="message" rows=5 cols=35></textarea> Εμφάνιση μηνυμάτων λαθών echo ldap_error( $ldap['conn'] ); Τερματισμός της σύνδεσης ldap_close($ldap['conn']); Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 13
Παράθεση ldap.php (1) <?php // LDAP variables $ldap['user'] = $_POST["username"]; $ldap['userpass'] = $_POST["password"]; $ldap['host'] = "localhost"; $ldap['port'] = 389; $ldap['dn'] $ldap['base'] = "uid=".$ldap['user'].",ou=people,dc=corelab"; = "dc=corelab"; // connecting to ldap $ldap['conn'] = ldap_connect( $ldap['host'], $ldap['port'] ) or die("could not connect to server {$ldap['host']}" ); ldap_set_option($ldap['conn'], LDAP_OPT_PROTOCOL_VERSION, 3); // binding to ldap $ldap['bind'] = ldap_bind( $ldap['conn'], $ldap['dn'], $ldap['userpass']); if(!$ldap['bind'] ) { echo ldap_error( $ldap['conn'] ); exit; } Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 14
Παράθεση ldap.php (2) // search for the user on the ldap server and return all // the user information $ldap['result'] = ldap_search( $ldap['conn'], $ldap['base'], 'uid='.$ldap['user'] ); //echo $ldap['result']; if( $ldap['result'] ) { // retrieve all the entries from the search result $ldap['info'] = ldap_get_entries( $ldap['conn'], $ldap['result'] ); } else { echo ldap_error( $ldap['conn'] ); exit; } if( $ldap['info'] ) {?> $_SESSION['uid'] = $ldap['info'][0]['uid'][0]; <html><body><font face=arial size=2> <form method="post" action="contact.php"> <table align=center> <tr><td colspan=2><strong>user info:</strong> <br>uid: <?php echo $ldap['info'][0]["uid"][0]?> Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 15
Παράθεση ldap.php (3) <br></strong></td></tr> <tr><td colspan=2><strong><br>contact the UOP:</strong></td></tr> <tr><td>recipient:</td><td><select name="sendto"> <option value="fmaster@cnmslab.uop.gr">user</option> <option value="vagelis@cnmslab.uop.gr">administrator</option></select></td></tr> <tr><td>name:</td><td><input size=25 name="name"></td></tr> <tr><td>email:</td><td><input size=25 name="email"></td></tr> <tr><td colspan=2>message:</td></tr> <tr><td colspan=2 align=center><textarea name="message" rows=5 cols=35></textarea></td></tr> <tr><td colspan=2 align=center><input type=submit name="send" value="submit"></td></tr> </table> </form> </body> </html> <?php } else { echo ldap_error( $ldap['conn'] ); exit; } // close connection to ldap server ldap_close($ldap['conn']);?> Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 16
Βασικά στοιχεία σελίδας contact.php (1) Ανάκτηση των πληροφοριών που στάλθηκαν από τη σελίδα ldap.php $to = $_REQUEST['sendto'] ; $from = $_REQUEST['Email'] ; $name = $_REQUEST['Name'] ; Header, subject του πρώτου email που θα σταλεί $headers = "From: $from"; $subject = "Web Contact Data"; Header, subject του δεύτερου email που θα σταλεί $headers2 = "From: noreply@cnmslab.uop.gr"; $subject2 = "Thank you for contacting us"; $autoreply = "Thank you for contacting us. Somebody will get back to you as soon as possible"; Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 17
Βασικά στοιχεία σελίδας contact.php (2) Body του πρώτου email που θα σταλεί $fields = array(); $fields{"name"} = "Name"; $fields{"email"} = "Email"; $fields{"message"} = "Message"; $body = "We have received the following information:\n\n"; foreach($fields as $a => $b) {$body.= sprintf("%20s: %s\n",$b,$_request[$a]); } Αποστολή των emails $send = mail($to, $subject, $body, $headers); $send2 = mail($from, $subject2, $autoreply, $headers2); Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 18
Παράθεση contact.php <?php $to = $_REQUEST['sendto'] ; $from = $_REQUEST['Email'] ; $name = $_REQUEST['Name'] ; $headers = "From: $from"; $subject = "Web Contact Data"; $fields = array(); $fields{"name"} = "Name"; $fields{"email"} = "Email"; $fields{"message"} = "Message"; $body = "We have received the following information:\n\n"; foreach($fields as $a => $b){ $body.= sprintf("%20s: %s\n",$b,$_request[$a]); } $headers2 = "From: noreply@cnmslab.uop.gr"; $subject2 = "Thank you for contacting us"; $autoreply = "Thank you for contacting us. Somebody will get back to you as soon as possible"; if($from == '') {print "You have not entered an email, please go back and try again";} else { if($name == '') {print "You have not entered a name, please go back and try again";} else { $send = mail($to, $subject, $body, $headers); $send2 = mail($from, $subject2, $autoreply, $headers2); if($send) { print "Mail Send"; } else {print "We encountered an error sending your mail, please notify webmaster@yourcompany.com"; } } }?> Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών 19