ThumbnailPhoto из ActiveDirectory вернулось неверно - PullRequest
0 голосов
/ 30 апреля 2018

Сначала я хочу отметить, что я не специалист по LDAP.

Мне нужно получить от ldap моей компании некоторую информацию, включая фотографию пользователя. Моя проблема в том, что после того, как я получу всю необходимую информацию, thumbnailPhoto кажется как-то поврежден. Я покажу пример: \ufffdPNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000\ufffd\u0000\u0000\u0000\u ...

Впервые я заметил это, когда попытался применить его на своем клиенте переднего плана и не смог создать образ из возвращающегося буфера. Плюс, когда я зарегистрировался в LDAP, чтобы увидеть, что размер возвращаемой фотографии почти в два раза больше.

Я проверил, была ли проблема с тем, как фотография была сохранена в LDAP, копия вставлена ​​в конвертер, и все было в порядке.

Я приведу фрагмент кода того, как я получаю информацию из LDAP с библиотекой activedirectory :

const ActiveDirectory = require('activedirectory');

exports = module.exports = () => {

return {
    auth: (doc) => {
        let user = 'project@ad.company.com',
            passwd = 'password provided by IT team';

        return new Promise((resolve, reject) => {
            let ad = new ActiveDirectory({
                url: 'ldap://something.ad.company.com:389',
                baseDN: 'OU=Company,DC=ad,DC=company,DC=com',
                username: user,
                password: passwd,
                attributes: { user: [] }
            });

            ad.authenticate(doc.username, doc.password, (err, auth) => {
                if(auth){
                    ad.findUser(doc.username, (err, user) => {
                        if(err){
                            reject(err);
                        } else {
                            resolve(user);
                        }
                    })
                } else {
                    reject(err);
                }
            });
        });
    }
}

}

exports['@singleton'] = true;

Я боролся с этим в течение некоторого времени, но я не понимаю, что происходит. Единственная информация, которую я имею об этом, находится по этой ссылке , которая сообщает, что «ldapjs не знает, что миниатюра действительно двоичная», но это было в 2013 году.

Буду признателен за некоторую помощь или, по крайней мере, за любые другие методы или библиотеки, которые я могу использовать в узле с экспрессом.

На данный момент приложение использует:

"activedirectory": "^0.7.2",

"electrolyte": "0.3.0",

"express": "^4.16.3",

Заранее спасибо.

1 Ответ

0 голосов
/ 30 апреля 2018

После повторного рассмотрения всех вопросов, опубликованных в репозитории activedirectory, я нашел нужный мне ответ.

  const customeParser = function(entry, raw, callback){ if (raw.hasOwnProperty("thumbnailPhoto")){ entry.thumbnailPhoto = raw.thumbnailPhoto; } callback(entry) }      

  let ad = new ActiveDirectory({
            url: 'ldap://something.ad.company.com:389',
            baseDN: 'OU=Company,DC=ad,DC=company,DC=com',
            username: user,
            password: passwd,
            attributes: { user: [] },
            entryParser: customeParser
        });

На передней панели, и если вы используете Angular 4 +:

this.domSanitizer.bypassSecurityTrustUrl('data:image/png;base64,'+ new Buffer(thumbnailPhoto).toString('base64'))
...