Built motion from commit e0fa946e.|2.6.5
[motion2.git] / server / services / email / lib / utils.js
index 92092a1..d14784d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2bb2=['isEmpty','html','test','replace','includes','attachments','forEach','filename','_SRC','_IMG','<span\x20style=font-weight:bold>\x20[Attachment:\x20','\x20]</span>','body','textAsHtml','message','originCc','originTo','bcc','attach','type','format','join','root','server/files/attachments/','writeFileSync','content','contentType','parser','from','messageId','inReplyTo','YYYY-MM-DD\x20HH:mm:ss','filter','application/ms-tnef','parseBuffer','first','<p>Empty\x20message</p>','Attachments','Title','Data','getHost','yahoo','imap.mail.yahoo.com','hotmail','outlook365','outlook.office365.com','127.0.0.1','lodash','randomstring','path','util','../../../config/logger','email','../../../config/environment','head','address','anonymous','generate','@xcally.com','value','name','split','length','Anonymous'];(function(_0x3aa319,_0x3fe925){var _0x1aaa7f=function(_0x9932f8){while(--_0x9932f8){_0x3aa319['push'](_0x3aa319['shift']());}};_0x1aaa7f(++_0x3fe925);}(_0x2bb2,0x1af));var _0x22bb=function(_0x5a70d3,_0x21f1a5){_0x5a70d3=_0x5a70d3-0x0;var _0xdd91cd=_0x2bb2[_0x5a70d3];return _0xdd91cd;};'use strict';var _=require(_0x22bb('0x0'));var moment=require('moment');var random=require(_0x22bb('0x1'));var fs=require('fs');var path=require(_0x22bb('0x2'));var util=require(_0x22bb('0x3'));var tnef=require('node-tnef');var logger=require(_0x22bb('0x4'))(_0x22bb('0x5'));var config=require(_0x22bb('0x6'));function getAddress(_0x246e6e){var _0x25d2be=_[_0x22bb('0x7')](_0x246e6e['value']);return _0x25d2be&&_0x25d2be[_0x22bb('0x8')]?_0x25d2be[_0x22bb('0x8')]:_0x22bb('0x9')+random[_0x22bb('0xa')](0x6)+_0x22bb('0xb');}function getFirstName(_0x22b7bb){var _0x4a0c0a=_[_0x22bb('0x7')](_0x22b7bb[_0x22bb('0xc')]);if(_0x4a0c0a&&_0x4a0c0a['name']){var _0x5f20fa=_0x4a0c0a[_0x22bb('0xd')][_0x22bb('0xe')](/\s+/);return _0x5f20fa[_0x22bb('0xf')]?_0x5f20fa['slice'](0x0,-0x1)['join']('\x20'):_0x4a0c0a[_0x22bb('0xd')];}return _0x22bb('0x10');}function getLastName(_0x44917b){var _0x43fe36=_['head'](_0x44917b[_0x22bb('0xc')]);if(_0x43fe36&&_0x43fe36[_0x22bb('0xd')]){var _0x9d9af1=_0x43fe36['name'][_0x22bb('0xe')](/\s+/);return _0x9d9af1['length']>0x1?_0x9d9af1['pop']():'';}return'';}function getMails(_0x5728b3,_0x4546e1){var _0x1f24df='';for(var _0x49df8b=0x0;_0x49df8b<_0x4546e1[_0x22bb('0xc')][_0x22bb('0xf')];_0x49df8b+=0x1){if(_0x4546e1['value'][_0x49df8b][_0x22bb('0x8')]!==_0x5728b3){if(!_[_0x22bb('0x11')](_0x1f24df)){_0x1f24df+=',';}_0x1f24df+=_0x4546e1[_0x22bb('0xc')][_0x49df8b]['name']||_0x4546e1[_0x22bb('0xc')][_0x49df8b][_0x22bb('0x8')]||'';_0x1f24df+='\x20<';_0x1f24df+=_0x4546e1[_0x22bb('0xc')][_0x49df8b]['address']?_0x4546e1[_0x22bb('0xc')][_0x49df8b][_0x22bb('0x8')]:_0x22bb('0x9')+random['generate'](0x6)+_0x22bb('0xb');_0x1f24df+='>';}}return _0x1f24df;}function parseEmail(_0x302439,_0x28c9f9,_0x9a6d58){if(_0x28c9f9[_0x22bb('0x12')]){var _0x2ee572=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;while(_0x2ee572[_0x22bb('0x13')](_0x28c9f9['html'])){_0x28c9f9[_0x22bb('0x12')]=_0x28c9f9[_0x22bb('0x12')][_0x22bb('0x14')](_0x2ee572,'');}if(_0x28c9f9['html'][_0x22bb('0x15')]('<img')){var _0x40aeeb=[];_0x28c9f9[_0x22bb('0x16')][_0x22bb('0x17')](_0x33b886=>{_0x40aeeb['push'](_0x33b886[_0x22bb('0x18')]);});var _0x168308=/<img.*? _SRC(.*?)[^\>]+>/g;var _0xa3eae=/src=\"data:image\/([a-zA-Z]*);base64,([^\"]*)\"/g;var _0x3e41a2=_0x28c9f9[_0x22bb('0x12')]['replace'](_0xa3eae,_0x22bb('0x19'));var _0x292341=_0x3e41a2['replace'](_0x168308,_0x22bb('0x1a'));for(let _0x36d461=0x0;_0x36d461<_0x40aeeb[_0x22bb('0xf')];_0x36d461++){var _0x391bcd=_0x292341[_0x22bb('0x14')](_0x22bb('0x1a'),_0x22bb('0x1b')+_0x40aeeb[_0x36d461]+_0x22bb('0x1c'));_0x292341=_0x391bcd;}_0x28c9f9[_0x22bb('0x12')]=_0x292341;}_0x9a6d58[_0x22bb('0x1d')]=_0x28c9f9[_0x22bb('0x12')];}else{_0x9a6d58['body']=_0x28c9f9[_0x22bb('0x1e')];}if(_0x9a6d58['body']){_0x9a6d58['body']=_0x9a6d58[_0x22bb('0x1d')][_0x22bb('0x14')](/<a\s+/gi,'<a\x20target=\x22_blank\x22\x20');}if(_0x28c9f9['to']){_0x9a6d58[_0x22bb('0x1f')]['originTo']=getMails(null,_0x28c9f9['to']);var _0xf1fe17=getMails(_0x302439['email'],_0x28c9f9['to']);if(!_[_0x22bb('0x11')](_0xf1fe17)){_0x9a6d58[_0x22bb('0x1f')]['cc']+=_0xf1fe17;}}if(_0x28c9f9['cc']){_0x9a6d58[_0x22bb('0x1f')][_0x22bb('0x20')]=getMails(null,_0x28c9f9['cc']);var _0x44e013=getMails(_0x302439[_0x22bb('0x5')],_0x28c9f9['cc']);if(!_[_0x22bb('0x11')](_0x44e013)){if(!_[_0x22bb('0x11')](_0x9a6d58[_0x22bb('0x1f')]['cc'])){_0x9a6d58['message']['cc']+=',';}_0x9a6d58[_0x22bb('0x1f')]['cc']+=_0x44e013;}}if(!_[_0x22bb('0x15')](_0x9a6d58[_0x22bb('0x1f')][_0x22bb('0x21')],_0x302439[_0x22bb('0x5')])&&!_['includes'](_0x9a6d58[_0x22bb('0x1f')]['originCc'],_0x302439[_0x22bb('0x5')])){_0x9a6d58[_0x22bb('0x1f')][_0x22bb('0x22')]=_0x302439[_0x22bb('0x5')];}if(_0x28c9f9[_0x22bb('0x16')]&&_0x28c9f9[_0x22bb('0x16')]['length']){_0x9a6d58[_0x22bb('0x1f')][_0x22bb('0x23')]=_0x28c9f9['attachments'][_0x22bb('0xf')];for(var _0x1c2652=0x0,_0xab5a20,_0x2cb823,_0x5ba8af;_0x1c2652<_0x28c9f9[_0x22bb('0x16')][_0x22bb('0xf')];_0x1c2652+=0x1){if(_0x28c9f9[_0x22bb('0x16')][_0x1c2652][_0x22bb('0x24')]==='attachment'){_0x5ba8af=_0x28c9f9['attachments'][_0x1c2652]['filename']||'attachment-'+_0x1c2652;_0xab5a20=util[_0x22bb('0x25')]('%s-%s',Date['now'](),_0x5ba8af);_0x2cb823=path[_0x22bb('0x26')](config[_0x22bb('0x27')],_0x22bb('0x28'),_0xab5a20);fs[_0x22bb('0x29')](_0x2cb823,_0x28c9f9['attachments'][_0x1c2652][_0x22bb('0x2a')]);_0x9a6d58[_0x22bb('0x1f')][_0x22bb('0x16')]['push']({'name':_0x5ba8af,'basename':_0xab5a20,'type':_0x28c9f9[_0x22bb('0x16')][_0x1c2652][_0x22bb('0x2b')],'filepath':_0x2cb823});}}}return _0x9a6d58;}exports[_0x22bb('0x2c')]=function(_0x34a352,_0x2e5f1c,_0x13c838){var _0x102c58={'from':getAddress(_0x2e5f1c[_0x22bb('0x2d')]),'firstName':getFirstName(_0x2e5f1c['from']),'lastName':getLastName(_0x2e5f1c[_0x22bb('0x2d')]),'mapKey':_0x22bb('0x5'),'message':{'from':getMails(_0x34a352['email'],_0x2e5f1c[_0x22bb('0x2d')]),'to':_0x34a352['email'],'cc':'','subject':_0x2e5f1c['subject']||'','messageId':_0x2e5f1c[_0x22bb('0x2e')],'inReplyTo':_0x2e5f1c[_0x22bb('0x2f')],'sentAt':moment(_0x2e5f1c['date'])[_0x22bb('0x25')](_0x22bb('0x30')),'attach':![],'attachments':[]}};if(!_0x2e5f1c[_0x22bb('0x12')]&&!_0x2e5f1c[_0x22bb('0x1e')]){var _0xda2e4f=_[_0x22bb('0x31')](_0x2e5f1c['attachments'],{'contentType':_0x22bb('0x32')});if(_0xda2e4f[_0x22bb('0xf')]){logger['info'](util[_0x22bb('0x25')]('Email\x20message\x20%s\x20is\x20in\x20TNEF\x20format:\x20message\x20content\x20will\x20be\x20converted\x20by\x20the\x20system',_0x2e5f1c[_0x22bb('0x2e')]));tnef[_0x22bb('0x33')](_[_0x22bb('0x34')](_0xda2e4f)['content'],function(_0x40c4e0,_0x477ce4){if(_0x477ce4){_0x2e5f1c[_0x22bb('0x12')]=_0x477ce4['BodyHTML']||_0x22bb('0x35');if(_0x477ce4[_0x22bb('0x36')]){for(var _0x52d5c2=0x0;_0x52d5c2<_0x477ce4['Attachments'][_0x22bb('0xf')];_0x52d5c2++){var _0xaa5d46=_0x477ce4[_0x22bb('0x36')][_0x52d5c2];_0x102c58[_0x22bb('0x1f')]['attachments']['push']({'filename':_0xaa5d46[_0x22bb('0x37')],'content':new Buffer(_0xaa5d46[_0x22bb('0x38')])});}}}_0x13c838(parseEmail(_0x34a352,_0x2e5f1c,_0x102c58));});}else{_0x2e5f1c['html']=_0x22bb('0x35');_0x13c838(parseEmail(_0x34a352,_0x2e5f1c,_0x102c58));}}else{_0x13c838(parseEmail(_0x34a352,_0x2e5f1c,_0x102c58));}};exports[_0x22bb('0x39')]=function(_0x1c3a50){switch(_0x1c3a50){case'gmail':return'imap.gmail.com';case _0x22bb('0x3a'):return _0x22bb('0x3b');case _0x22bb('0x3c'):return'imap-mail.outlook.com';case _0x22bb('0x3d'):return _0x22bb('0x3e');}return _0x22bb('0x3f');};
\ No newline at end of file
+var _0x469d=['BodyHTML','Attachments','<p>Empty\x20message</p>','user=','auth=Bearer\x20','utf-8','toString','moment','randomstring','util','node-tnef','email','../../../config/environment','head','value','address','anonymous','generate','@xcally.com','substring','name','indexOf','split','length','slice','join','Anonymous','pop','isEmpty','html','test','replace','<img','attachments','filename','_IMG','<span\x20style=font-weight:bold>\x20[Attachment:\x20','\x20]</span>','body','originTo','message','originCc','includes','attach','type','attachment','attachment-','format','%s-%s','root','server/files/attachments/','writeFileSync','push','contentType','headerLines','Auto-Submitted:\x20auto-replied','X-Auto-Response-Suppress:\x20All','line','isAutoreply','from','subject','messageId','inReplyTo','date','YYYY-MM-DD\x20HH:mm:ss','textAsHtml','application/ms-tnef','info','Email\x20message\x20%s\x20is\x20in\x20TNEF\x20format:\x20message\x20content\x20will\x20be\x20converted\x20by\x20the\x20system','parseBuffer','first','content'];(function(_0x469a00,_0x573952){var _0x4813c0=function(_0x1c9f15){while(--_0x1c9f15){_0x469a00['push'](_0x469a00['shift']());}};_0x4813c0(++_0x573952);}(_0x469d,0x97));var _0xd469=function(_0x297246,_0x46b402){_0x297246=_0x297246-0x0;var _0x3038a9=_0x469d[_0x297246];return _0x3038a9;};'use strict';var _=require('lodash');var moment=require(_0xd469('0x0'));var random=require(_0xd469('0x1'));var fs=require('fs');var path=require('path');var util=require(_0xd469('0x2'));var tnef=require(_0xd469('0x3'));var logger=require('../../../config/logger')(_0xd469('0x4'));var config=require(_0xd469('0x5'));function getAddress(_0x50e1b6){var _0x2ef488=_[_0xd469('0x6')](_0x50e1b6[_0xd469('0x7')]);return _0x2ef488&&_0x2ef488[_0xd469('0x8')]?_0x2ef488[_0xd469('0x8')]:_0xd469('0x9')+random[_0xd469('0xa')](0x6)+_0xd469('0xb');}function getFirstName(_0x5c6f99){var _0x4e6b84=_[_0xd469('0x6')](_0x5c6f99[_0xd469('0x7')]);if(_0x4e6b84&&_0x4e6b84['name']){if(_0x4e6b84['name']==_0x4e6b84[_0xd469('0x8')]){return _0x4e6b84['name'][_0xd469('0xc')](0x0,_0x4e6b84[_0xd469('0xd')][_0xd469('0xe')]('@'));}var _0x15ce2d=_0x4e6b84[_0xd469('0xd')][_0xd469('0xf')](/\s+/);return _0x15ce2d[_0xd469('0x10')]>0x1?_0x15ce2d[_0xd469('0x11')](0x0,-0x1)[_0xd469('0x12')]('\x20'):_0x4e6b84[_0xd469('0xd')];}return _0xd469('0x13');}function getLastName(_0x15d42e){var _0x5216fd=_[_0xd469('0x6')](_0x15d42e['value']);if(_0x5216fd&&_0x5216fd[_0xd469('0xd')]){var _0x24120b=_0x5216fd[_0xd469('0xd')]['split'](/\s+/);return _0x24120b[_0xd469('0x10')]>0x1?_0x24120b[_0xd469('0x14')]():'';}return'';}function getMails(_0xa3c0f6,_0x36fe55){var _0x195a2b='';for(var _0x251fc6=0x0;_0x251fc6<_0x36fe55[_0xd469('0x7')][_0xd469('0x10')];_0x251fc6+=0x1){if(_0x36fe55[_0xd469('0x7')][_0x251fc6][_0xd469('0x8')]!==_0xa3c0f6){if(!_[_0xd469('0x15')](_0x195a2b)){_0x195a2b+=',';}_0x195a2b+=_0x36fe55[_0xd469('0x7')][_0x251fc6][_0xd469('0xd')]||_0x36fe55[_0xd469('0x7')][_0x251fc6][_0xd469('0x8')]||'';_0x195a2b+='\x20<';_0x195a2b+=_0x36fe55[_0xd469('0x7')][_0x251fc6][_0xd469('0x8')]?_0x36fe55[_0xd469('0x7')][_0x251fc6]['address']:'anonymous'+random[_0xd469('0xa')](0x6)+_0xd469('0xb');_0x195a2b+='>';}}return _0x195a2b;}function parseEmail(_0x50f918,_0x39bb10,_0x32476d){if(_0x39bb10[_0xd469('0x16')]){var _0x5e92ea=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;while(_0x5e92ea[_0xd469('0x17')](_0x39bb10[_0xd469('0x16')])){_0x39bb10[_0xd469('0x16')]=_0x39bb10['html'][_0xd469('0x18')](_0x5e92ea,'');}if(_0x39bb10[_0xd469('0x16')]['includes'](_0xd469('0x19'))){var _0x404b03=[];_0x39bb10[_0xd469('0x1a')]['forEach'](_0x2f3e47=>{_0x404b03['push'](_0x2f3e47[_0xd469('0x1b')]);});var _0x1b2ea7=/<img.*? _SRC(.*?)[^>]+>/g;var _0x489857=/src="data:image\/([a-zA-Z]*);base64,([^"]*)"/g;var _0x443fe3=_0x39bb10[_0xd469('0x16')][_0xd469('0x18')](_0x489857,'_SRC');var _0x52911a=_0x443fe3[_0xd469('0x18')](_0x1b2ea7,_0xd469('0x1c'));for(let _0x4d2b5e=0x0;_0x4d2b5e<_0x404b03[_0xd469('0x10')];_0x4d2b5e++){var _0x2375ee=_0x52911a[_0xd469('0x18')](_0xd469('0x1c'),_0xd469('0x1d')+_0x404b03[_0x4d2b5e]+_0xd469('0x1e'));_0x52911a=_0x2375ee;}_0x39bb10[_0xd469('0x16')]=_0x52911a;}_0x32476d[_0xd469('0x1f')]=_0x39bb10['html'];}else{_0x32476d[_0xd469('0x1f')]=_0x39bb10['textAsHtml'];}if(_0x32476d[_0xd469('0x1f')]){_0x32476d[_0xd469('0x1f')]=_0x32476d[_0xd469('0x1f')]['replace'](/<a\s+/gi,'<a\x20target=\x22_blank\x22\x20');}if(_0x39bb10['to']){_0x32476d['message'][_0xd469('0x20')]=getMails(null,_0x39bb10['to']);var _0x496c5c=getMails(_0x50f918[_0xd469('0x4')],_0x39bb10['to']);if(!_['isEmpty'](_0x496c5c)){_0x32476d[_0xd469('0x21')]['cc']+=_0x496c5c;}}if(_0x39bb10['cc']){_0x32476d[_0xd469('0x21')][_0xd469('0x22')]=getMails(null,_0x39bb10['cc']);var _0x2cb366=getMails(_0x50f918[_0xd469('0x4')],_0x39bb10['cc']);if(!_['isEmpty'](_0x2cb366)){if(!_[_0xd469('0x15')](_0x32476d[_0xd469('0x21')]['cc'])){_0x32476d['message']['cc']+=',';}_0x32476d['message']['cc']+=_0x2cb366;}}if(!_['includes'](_0x32476d[_0xd469('0x21')]['originTo'],_0x50f918[_0xd469('0x4')])&&!_[_0xd469('0x23')](_0x32476d[_0xd469('0x21')][_0xd469('0x22')],_0x50f918[_0xd469('0x4')])){_0x32476d['message']['bcc']=_0x50f918[_0xd469('0x4')];}if(_0x39bb10[_0xd469('0x1a')]&&_0x39bb10[_0xd469('0x1a')][_0xd469('0x10')]){_0x32476d[_0xd469('0x21')][_0xd469('0x24')]=_0x39bb10[_0xd469('0x1a')][_0xd469('0x10')];for(var _0x2bb203=0x0,_0x3cc0b7,_0x2b5cdd,_0x384967;_0x2bb203<_0x39bb10[_0xd469('0x1a')][_0xd469('0x10')];_0x2bb203+=0x1){if(_0x39bb10['attachments'][_0x2bb203][_0xd469('0x25')]===_0xd469('0x26')){_0x384967=_0x39bb10['attachments'][_0x2bb203][_0xd469('0x1b')]||_0xd469('0x27')+_0x2bb203;_0x3cc0b7=util[_0xd469('0x28')](_0xd469('0x29'),Date['now'](),_0x384967);_0x2b5cdd=path['join'](config[_0xd469('0x2a')],_0xd469('0x2b'),_0x3cc0b7);fs[_0xd469('0x2c')](_0x2b5cdd,_0x39bb10['attachments'][_0x2bb203]['content']);_0x32476d[_0xd469('0x21')][_0xd469('0x1a')][_0xd469('0x2d')]({'name':_0x384967,'basename':_0x3cc0b7,'type':_0x39bb10[_0xd469('0x1a')][_0x2bb203][_0xd469('0x2e')],'filepath':_0x2b5cdd});}}}if(_0x39bb10[_0xd469('0x2f')]&&_0x39bb10['headerLines'][_0xd469('0x10')]>0x0){var _0x55b25c=[_0xd469('0x30'),_0xd469('0x31'),'Precedence:\x20auto_reply'];for(var _0x1597ab=0x0;_0x1597ab<_0x39bb10['headerLines']['length'];_0x1597ab++){var _0x3f9bb8=_[_0xd469('0xe')](_0x55b25c,_0x39bb10[_0xd469('0x2f')][_0x1597ab][_0xd469('0x32')]);if(_0x3f9bb8>=0x0){_0x32476d[_0xd469('0x33')]=!![];}}}return _0x32476d;}exports['parser']=function(_0x1fb963,_0x4c3311,_0x43b4ef){var _0x1d9008={'from':getAddress(_0x4c3311[_0xd469('0x34')]),'firstName':getFirstName(_0x4c3311['from']),'lastName':getLastName(_0x4c3311[_0xd469('0x34')]),'mapKey':_0xd469('0x4'),'message':{'from':getMails(_0x1fb963[_0xd469('0x4')],_0x4c3311['from']),'to':_0x1fb963[_0xd469('0x4')],'cc':'','subject':_0x4c3311[_0xd469('0x35')]||'','messageId':_0x4c3311[_0xd469('0x36')],'inReplyTo':_0x4c3311[_0xd469('0x37')],'sentAt':moment(_0x4c3311[_0xd469('0x38')])[_0xd469('0x28')](_0xd469('0x39')),'attach':![],'attachments':[]}};if(!_0x4c3311[_0xd469('0x16')]&&!_0x4c3311[_0xd469('0x3a')]){var _0x2ad44f=_['filter'](_0x4c3311[_0xd469('0x1a')],{'contentType':_0xd469('0x3b')});if(_0x2ad44f[_0xd469('0x10')]){logger[_0xd469('0x3c')](util['format'](_0xd469('0x3d'),_0x4c3311[_0xd469('0x36')]));tnef[_0xd469('0x3e')](_[_0xd469('0x3f')](_0x2ad44f)[_0xd469('0x40')],function(_0x5cc524,_0x4e1964){if(_0x4e1964){_0x4c3311[_0xd469('0x16')]=_0x4e1964[_0xd469('0x41')]||'<p>Empty\x20message</p>';if(_0x4e1964[_0xd469('0x42')]){for(var _0x379302=0x0;_0x379302<_0x4e1964['Attachments'][_0xd469('0x10')];_0x379302++){var _0x4dfc4b=_0x4e1964[_0xd469('0x42')][_0x379302];_0x1d9008['message']['attachments'][_0xd469('0x2d')]({'filename':_0x4dfc4b['Title'],'content':Buffer['from'](_0x4dfc4b['Data'])});}}}_0x43b4ef(parseEmail(_0x1fb963,_0x4c3311,_0x1d9008));});}else{_0x4c3311[_0xd469('0x16')]=_0xd469('0x43');_0x43b4ef(parseEmail(_0x1fb963,_0x4c3311,_0x1d9008));}}else{_0x43b4ef(parseEmail(_0x1fb963,_0x4c3311,_0x1d9008));}};exports['generateXOAuth2Token']=function(_0x17ddb0,_0xc7bb9e){var _0x2a0a4b=[_0xd469('0x44')+(_0xc7bb9e||''),_0xd469('0x45')+_0x17ddb0,'',''];return Buffer['from'](_0x2a0a4b[_0xd469('0x12')]('\ 1'),_0xd469('0x46'))[_0xd469('0x47')]('base64');};
\ No newline at end of file