# Αναζητήστε ένα πραγματικό τοπικό κατάλογο LDAP

> Αναζητήστε μια απομονωμένη περίπτωση OpenLDAP και επαληθεύστε το αποτέλεσμα του συνδέσμου σε συνολικό επίπεδο5 0.0.19.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: el
Content-SHA256: 2e25e0f18c2199b5e8c24bc5f82cda1b77bba124240e34157ebb1464f6c2b671
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Το `LDAP(options, callback)` είναι ο εγγενής πελάτης ανάγνωσης. Το `options.ldap` παρέχει `host` και `port`· το `user` είναι το DN του bind, το `password` ο κωδικός του, το `dn` η βάση αναζήτησης και το `type` η ζητούμενη κλάση αντικειμένου (`person` ή `group`). Το `type:'profile'` χρησιμοποιεί το `login` για αναζήτηση του `sAMAccountName` και επιστρέφει ένα αντικείμενο ή `null`. Το `noauth:true` παραλείπει το bind· δεν παραχωρεί δικαιώματα στον κατάλογο. Ορίζετε πάντα ρητά μια βάση αναζήτησης.

Το `attributes` αντιστοιχίζει ονόματα επιστρεφόμενων χαρακτηριστικών σε τύπους μετατροπής (`string`, `number`, `date`, `buffer`, `hex`, `base64` κ.λπ.)· **δεν** είναι λίστα επιτρεπόμενων χαρακτηριστικών προς ανάκτηση. Ένας κατάλογος μπορεί να επιστρέψει βαθμωτές τιμές ή πίνακες όταν ένα χαρακτηριστικό επαναλαμβάνεται. Περιορίστε τα δεδομένα που εκθέτει το HTTP API σας.

Αυτό το εκτελέσιμο fixture απαιτεί τοπικά εργαλεία **OpenLDAP**: `slapd`, `ldapadd` και τα αρχεία σχημάτων core/cosine/inetorgperson. Στο macOS οι προεπιλογές παρακάτω χρησιμοποιούν τα εργαλεία του συστήματος· άλλες εγκαταστάσεις μπορούν να ορίσουν `FORGE_SLAPD`, `FORGE_LDAPADD` και `FORGE_LDAP_SCHEMA`. Εκτελεί έναν ξεχωριστό διακομιστή loopback χωρίς προνόμια με προσωρινή βάση LDIF και μετά τον τερματίζει. Δεν χρησιμοποιεί ποτέ υπάρχοντα κατάλογο. Το τεστ καλύπτει αναζήτηση, πολλαπλές τιμές χαρακτηριστικού και ένα όριο μη έγκυρου bind· δεν πιστοποιεί συμβατότητα με Active Directory, TLS/StartTLS, ομάδες ή συμπεριφορά επανασύνδεσης. Μη στέλνετε ποτέ πραγματικά διαπιστευτήρια μέσω μη προστατευμένου δικτύου.

**Αποφασίστε την επαλήθευση από το σύνδεσμο.** Ελέγξτε το αποτέλεσμα του συνδέσμου στον δικό σας κώδικα και αντιμετωπίζετε ένα επιστρεφόμενο προφίλ ως αυθεντικό μόνο μετά την επιτυχία του συνδεσμού.

```js controllers/directory.js
exports.install = function() {
	ROUTE('POST /directory-fixture/ @json', directory);
};
function directory($) {
	var port = Number($.body.port);
	if (!Number.isInteger(port) || port < 1024 || port > 65535)
		return $.invalid(400);
	LDAP({
		ldap: { host: '127.0.0.1', port: port },
		user: 'cn=admin,dc=forge,dc=test',
		password: $.body.wrong ? 'incorrect' : 'local-fixture-only',
		dn: 'dc=forge,dc=test',
		type: 'person',
		attributes: { cn: 'string', mail: 'string' }
	}, function(err, people) {
		if (err)
			$.json({ failed: true });
		else
			$.json({ people: people.map(person => ({ cn: person.cn, mail: person.mail })) });
	});
}
```
