From 1370e3155bed93596bd77b04980207d35e83169a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Pollak?= Date: Tue, 16 Sep 2014 20:53:18 -0700 Subject: [PATCH 01/25] Use CoreLocation (via LocateMe binary) to get location in OSX. --- lib/agent/providers/geo/darwin/LocateMe | Bin 0 -> 53460 bytes lib/agent/providers/geo/index.js | 38 +++++++++++++++++++++--- 2 files changed, 34 insertions(+), 4 deletions(-) create mode 100755 lib/agent/providers/geo/darwin/LocateMe diff --git a/lib/agent/providers/geo/darwin/LocateMe b/lib/agent/providers/geo/darwin/LocateMe new file mode 100755 index 0000000000000000000000000000000000000000..e0ed86c19c3e2656f3a5d5dc91ba583712c32ee9 GIT binary patch literal 53460 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 GT>3x7X{=NL literal 0 HcmV?d00001 diff --git a/lib/agent/providers/geo/index.js b/lib/agent/providers/geo/index.js index 5b1854ef9..4a33c0b92 100644 --- a/lib/agent/providers/geo/index.js +++ b/lib/agent/providers/geo/index.js @@ -7,10 +7,37 @@ // GPLv3 Licensed ////////////////////////////////////////// -var client = require('needle'), +var join = require('path').join, + exec = require('child_process').exec, + client = require('needle'), get_agent = require('random-ua').generate, providers = require('./../../providers'); +var get_using_corelocation = function(cb) { + + var bin = join(__dirname, 'darwin', 'LocateMe'); + + // options in http://iharder.sourceforge.net/current/macosx/locateme/ + exec(bin + ' -f "{LAT},{LON},{ALT},{HAC},{VAC}"', function(err, out) { + if (err) return cb(err); + + var list = out.toString().split(','); + if (!list[1]) + return cb(new Error('Unable to get geoposition data using CoreLocation.')); + + var res = { + lat: list[0], + lng: list[1], + altitude: list[2], + accuracy: list[3], + vertical_accuracy: list[4] + } + + cb(null, res); + }) + +} + var process_response = function(body, cb){ var coords; @@ -59,12 +86,15 @@ exports.send_data = function(list, cb){ }; -exports.get_location = function(callback){ +exports.get_location = function(cb) { + + if (process.platform == 'darwin') + return get_using_corelocation(cb); providers.get('access_points_list', function(err, list) { - if (err) return callback(err); + if (err) return cb(err); - exports.send_data(list, callback); + exports.send_data(list, cb); }); }; From bfc2ab1472f69e5f1dc5092fd801155b314ba978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Pollak?= Date: Tue, 16 Sep 2014 23:12:24 -0700 Subject: [PATCH 02/25] Replace LocateMe binary with whereami. --- lib/agent/providers/geo/darwin/LocateMe | Bin 53460 -> 0 bytes lib/agent/providers/geo/darwin/whereami | Bin 0 -> 42992 bytes lib/agent/providers/geo/index.js | 26 +++++++++++++++--------- 3 files changed, 16 insertions(+), 10 deletions(-) delete mode 100755 lib/agent/providers/geo/darwin/LocateMe create mode 100755 lib/agent/providers/geo/darwin/whereami diff --git a/lib/agent/providers/geo/darwin/LocateMe b/lib/agent/providers/geo/darwin/LocateMe deleted file mode 100755 index e0ed86c19c3e2656f3a5d5dc91ba583712c32ee9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53460 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 GT>3x7X{=NL diff --git a/lib/agent/providers/geo/darwin/whereami b/lib/agent/providers/geo/darwin/whereami new file mode 100755 index 0000000000000000000000000000000000000000..4965e046d234338677b833c0007d2db80613abed GIT binary patch literal 42992 zcmeHw30M%?w^ zYOPv*t*v#fRa~lQwPIcBRz+(qxYb&Bt^DWA+#4nXsNeVe&-;Gg|2sUBd(V2$-S6Cc zW;pTe&PzLn5m_@#t`);D&ES?bVweI(3^9gj3AYSxxja@nIQ-r45yKE`d5J8+Iw91P z3W><&@!^T_mMpA%h$W68FxbY}!tF@Na=Ag7Z6E*yLVXV)A=LM^E60N{=F5E9FuCS9 zMC5Y4A!CBxj1ubmqARCw9pRub6|g7z8W04hPoAnw(<*g<6Y7iY#_97Wg@*8}?Mu?A z^)(q5>dWrV=_A=?5Qbu|_mays6DB3e)0Ku)wIW?v%f3RQFB1zLE`<4)g{?r4%aim5 zol2cTn1uGd^yBQCMvOw3f7RB<+Lx53(Cg7ap}r3Si9VtPVg6N*KFqHnM_W6;&xpS1 zL=a*ARa;+%I!mQamaEhgHNYseFQ*S@-)5o&;a6R9xiVEgQHNE*UP676zMQ^t(!daY zRsBM9X9|H=E)SE&OL-}WaC#Uq!2!%(q~TycL%rDl@si86I!y}LCC^mopnKG(&zoas zn2=Z7C6}wy5Pr2jb5`rrCn5U!kWPW{tJ{lkU0_*$T3DxHR&$Ac2)|BW zdb&nU*lUf?_lQ0*Wq^>MUs9}QD$YaPx-lv;W@va=WIQ2_=j>u2WUp8*xHpOmu{-m1 zc|aB{SiF zcssyt4?Kb?pXH%H#giFEN&#L7OJqh2w=>+n8G4;>nreb?a!y(@z<9NW8|}#d+|NJO zzUK!E{v7e!fR7`7>IgVjxEVV~NZgTK+oIiAH(e3`AHL}N`E_PszQ@CjdE}Zb6eQG~ zZ(NSvpiK9TQcch)bUD5exU|XA=qBrZLp3_(s3>WS54+q!obO1bPOpL?-dAd-f)>0` ze=6K&{hfb-B6_XW02=F0gK}UZaMj9()7Q|tx{F?sj|feM8ai`5sf7C0(24#& z5SsJBTn7m9LE8+p8ysnTq(0DkR1<*6UTBwvob`IZSjurl?K6lkS*zTfE1`N8zph?t zY_7lLYIwjBFSxNC7eYTnJG&4V`yF0w;YNCC9>YlZ3nL`Hz226<+Y)$N0&h#;Z3(HT%@e>ONfLS@5%BH zx{sEQk&cy)lgh^)pk>0Ahs-$j99VtY7qb*z0jk&cfN0UwbCubs21=ul4G&-vlOYO4 zbr!Y-fb%QlGzG_kELh1JAGjKE#w$_A`+!2L`=GQba3O~$nGFOa$Da>)V3Qdy5Po}( zU(fOT{frW(z%&lrg-`9Qj&oe5EHe}vX?zLHol&PLSOQj(^nPfBR$*OrLq#TAXP`j^ zps6g&mC9mdF$Lc0&e}udim06JDNiC`3cLp_HFAlZ+;5091!KK|EYxjT8*AG9CMR#kNcaD2#Vz6pj`yNv;Q{u3)hOCaFc z86k7jXP`kDlRWKg2x4qm3`7OA0BTaLDgX}JNU+kvIn#TlO43ZbF!iWSC$qI9WUG!P-Tb14?>4w4u_Xwr;ajp z>dxjU@F4`1*PXeH6a_X%EN1YutSGt^*aAT-@v#RS`9LTt@!1u|PRXYac-hOr9l zz6V=^IAlzL%9-fm6JF*ryBYKb&{fRolGf-d3clSP_8vu*ywly4JXBLi9qHCv@g9;Yo{&k(L$)%(^#|NX2s8e z%w`AhS1Ma0-W2!}Ww`cRP@2&LFb`Nvb+y}M&;z51D-;5>kh&1&E&0K4qrF{l7h$YW3dEHi76LX8-oLp2ORwDFh9 zMv&AHQ~!V=Mwu3JTuL3hCD^6cbn!dHAUD&iS9|O zk7cZjE`SylUhXn;Ee=M9!*^g}GUGl|I3~T0gO19KKLLdEAka>l8s|TAGPKTrW|bi} z4Y!XHJ(C#|Hk*dKa3Q}kw28^i8Y zTh`L*!{NpkvLf5t&=jEcSI7#g4Nwi2E91bE0P5#5&|+as8e+1k0L5j{J78t_LsY-? z@-Sniu7EWuzcdzRrDB&nKb%I{Y(wFdnWAS_?=wcv>=&KuQg9WA{QQH7g7qLYZw0I* z*{;tHcBnra zX?z@Md;v9GaNQ69P2b=H1yHF6bua=%8DCa5W1|QBN@WEX4UM_d!SWc%;?L0m)w~90 zpG%+w9zdyrK9`x7ppk%fmzk#^0^I`U#Olf>oK{Th2N)Y*?hW^Qbjt~6kgov7DGQQo z%9hXF%3?r8^{vRLh%{bCktG~Ur07bdDMBpEuXq6s+x`)g8)Zr_Hzb6a#@pb6NRDg; zrG_wR{y{rw{`DtOU4E18yJZb2K@T|VvdzBWh@rEry3}}d-%V&&_w%p1JU$P&YqGwl z485xN$%=F$S>FpXFu6luQ3oJ*QO3KL$f{m-jCAgi#z#;_ zSoBazGU)4AFi&v+h1^3ye1v14@nE#*!CoK&^+shiONAaDU5XWQ#AT){4i~1WrC=L8 zT~*!#2Cf)WiK2pwE;IkYk~f9&OUiH&Q!^pE1IU+E;<-0FBJ5SIKNwtB1^oy}opNh=g zrXxpgTSEq!YB4MG1OnQZiUKbHRPA;eNv4LsavWzdFdiOTeU%IiKXCXx5Y$MP095U^ z6iKFrt2vJ481N~978dyW0Q&i>wDe=FJF zo9ypx_V+IPdyoCS&;CAOe;={GPuSmQ@C%tNYI`1h=%jJgosK|QoQlY*8_;S}TVU)G z#(H7wXN;j&L{%BaGBLIXV+%0$Eygxs>`ROtz*q^!E?{gi#-3tqF2-6yJF3dVSP;gt zF_wTaHO3}kEE!|dF!nCSu;o?ZBWG$E#v(9w6=VG|_7r3O7;}aGR)x=*sW^sIwZqsD zj5Whp62=@cR)jGIW6Lr22qwkU^%%R2vF#YUhOxsKI|nha9j_4fmx(D&$^f?_wP8et zI!dF_GK#b`O%kJ0s|<`5yh{zC9NBz$uTRxvq$P)E109aym7`RK)Oc08GE!|&>M|8+ zaVm9^GDedX#ON~A(VAps&;;c~a6bqG-XKN^VxfR!)XFSIuQWs})Zn$I3u4l_2;#z& zY04Cq8-O@-YC%ZDWKo_4!jyWIPMIuCf*dH4ayT3~{3*bK2vr)`6U0DXSbu>yFiw@E z)Q77T6VjB)j3UF3s?n*Ya72T`kfCQlQfEleqJx1t#hhOQWDY3lS_WgnY%)n2jV@WG z274J+p+;>`q*0UDVues_=rAS+UBC5WuB}` zW>ZtfYiMSJCW3)xpneINQUQ5RsVQEfldG*Tm0p{s$RSLj3h=GavE^KgKL~6H#|(~8 zrhrpN-E^q(SCAtVsx-`cxK5|x)i=!~_*JP4P|@m?FjX@0LJ<*dS@lbSS)r*4b&672 zyP4E!WE?h~XmeUMi9kh#zn7s%3u00g`c#H>;$uBi8SWRnA}2CaG-{|`sAj0XIB5Mz zU~y0_1ll`n!X%)+lE!CK>0@=8>>My+C^$|Jn;42di9rBHE7K=HW1SRAf+i4dL?!u=-FJHBZY#44vY&*eUeV4ML!*gPsm7t zo@z$;BxPsIfy1E7NHQ>T^N1kl4J>jx9HeO!$qYE@K&GXJNOiI@8@dv_G{9L6Q;O9ZgILK8QQgJwWvC1|6#2Y@nT})1WD9=iZiWmPCdHj5g0MQJ2BJfg z*gL%oOUA*Q9p3;7VMeKXM5x3nJ>L=^aV%TM#4@qUAU0^kFhr*+b>cKKz=~l=Q`8s= zrIeP;Dw&`ZCo7?gr>oS;WU)?_l4<~amXA1Imm^lBKv{^>U^LYEh(lAANt4B@iDI)6 zq$qqCuv)3tW3uM-%;lD)&_fDpl``2!{Ej9=oUX_btCf%zaB~X83Qio7;vBccvEWFn zgjo-?`Y`O!Ax=@UgXX2=K2#L+xE#fNx=M$wuhLySjvukJD3N1B@~uNlWDu@oN0 z+}h(+EXfSN4~>L-H$;<+y@Pg_;GnKk{d$EAlmzu*@cj|!2y&PQBjLpqoaROzt+8h>0l9SHMy@kR7gP=4go5@^9=IH#c&6j`y(cI;0agI-7ghr_h@M26&TsS5{cLlPjhQV@p;mDaiB_U9uAyBdYJwpQg z8H%W*bpa0#>jC_H5M=}WYm}KG9usY+oF+0WgCZsglyPR5qjieCUMV-DqE2c}or*#{ zV&d4&#&VKEsE0E&%B-|T472OshZwEGiIrb{U* z3j4E-13<_f8-?^BYOX64lf>{F0j*yqGbD)S0&vfi1nlgeBWxI-8o$c(4A!Rs`VY5?F0S`fN;ZYKM zNgKJ&vI=e3AUfY}Zi6D*c{cOWV)J`eLOmUUhVMCTyvpf0iOhIWJ(2mW4&)1iJK-9~ z7cWdNg5yKG(%_!)8^?!Rz3fHx#pE}bYqpBZ$8umOy3X-07V-=7fp#2&`|sa5{-LaL z_@Vkk^KIrqj?s<>a5u+CVYnU&`376sfqFYa+7}7GxfZBiB9DAgz<1yc_zb|ef$)K! z0C&})Z#nRN^alD40^bL3pzk*DDG48GxwXm%^U)02ehT4hT91A8wLg@{b`wP8;n0V> z>d0RhP+GqMAGVtpq+Va8?<3&*mGI&A1bfkRdG)^=2=ht038bH!+esbm>NfCyTgkN- ze4m27s9pkMyTZPW0cbM?Okr8(Z?8AIJLm7Te_=wwmO+EzqM*jZ5e~$2XfHc^P>K$S^ zJ|TY^@E@t-%0EZQUq^l6)=!gL9RI7z^&s$7-{kn~zHyay<*-!ZD zYadvC-GOf-;e*+ey9DKoNUU1=e%F&>9E>kZA>N*Z$oGHa8sCl6JBfq_5>6vwAqnwR z9MfM;!Y@d;nS{GYc#woYk?H|=2>2ZdeyRZPLh$nicrn2*72x|5{5kcJ-vywDyK!S@o>^UiwoI1#%ONH~{-UkbuA1g<7w7|~Dp zX!+58PxHG7BHrYtI1K4`EhsKA+_IljJPolPoZvl?*Hr)G4jlgjlCBF$_kDu*1796Xrv<^A2!1=^ zr|B*uc=Q%RehDE=Jk9TJf)^2d55j+(;K5w>5s|*HZR^MB?L+uriNU^mD~{&y zE`$!x;%xdrWi|k1;bx*wfUXy83Y5CqC)JZEvrNA}MeaaA zJ3Er{8cxcqlLv=KI+lGGLQf!cK(SXS!H*Z_bA@uZI#?NkUrgw47=A(enD3lv^1IpOBE&&&MR+6sGG93a=ONZx_Jd z3*agNOy_N?kIu^!rt^1w>nXYpqx}E3LaKK>S>M&CH<$Fw`sfs|CH;HzYxI>7eUy)` zFR30Hx(fPdnH@)=-(iAkv$!a|n?KhtVOq4fD19`cJ6lj0hSF0Byi6S4H*$0$J0E%vozPkPyCrVQ6TaVu^jWDp*eGPz_6th!oM z93r0_8U?N*Ja?TK^n=K)Ap0hiho05Zlj}inT+I|W6(klD$2(=jgFhy>%ncH;FgYd; zy>H+oAG~Dn+%LD3+Y00C5wH@snOytgW+CJoOv-evAxEC1NJ<4eLrSg1kN|h;$Wby4 z>|tzfp;;}*!yWGGQ{t5BWG1(mZ0xZa9nc)JbrRs~nuBnV?AHj&gHL+HFUh;M0nVq{;H6)XDOc422F7tt6)-Y@$d{)?^s8 zOmPT)IfwlcqkIDRh+v_dGh1KWJOmO7Q%+Q5q)`Vk^yy-tP-+#eRHswq)L-gMZh4K~ zTEbzfBy<;n@7BOahidDN&R|QHBysN*iU=oPUmdoRL)~2W+DTDAI9?@Ers(i^DQ*4c zgW=plQ86&c<)IN!BiNh`T+3mdZAMT(112}M)WN+NdXi2H?TPjNk%JdWG<+UWlgtz| zx@u2Rdp1x)9Oq=jXuj3I(`I=Q~XSSFsg#d$ya)S+5Sj zEn#uI&OQ-5+)!l+OJKXU4qWTtyHGm$#0+(k92}mo)ydhf1tRA<)SAHub}Ja+z(q(& zysglwlwz1HYi16t&8$dgo-2ygu-=l)hwx3^g<+s!Ig*o@5>Y1eg~*1v_Zgf{Gf&vx z+!Blz!taBC{vTPL6rHx(ZME2X=tGgKYh%~OU7I>MI9w2&v1uLQrflujWYkKlr&ex` zZf>36Z*&tjyYQ2Y5pv=Bm=D9UkeO&LVmi;e%C0AHE#(70l2+V$;y%E5&Pw4Y0MCS* zUdZ1OZaibd3xgQ=;ls&uFD>}Z&d|!w1>i|ur7N}Vq$OsD{BuQ z#{AL!t^klneH2E1%uhT<;KBg&!-r8`1s||N+Pg%a!iYn8dXA1T%JX5Ar~7K?B8}-& z82M42o~t8_@_ZQO>HgbVB2Qr|508uNMdkT0%FhyW_M^i!rcYri|4<;$hf$vH+dU`p z6mAZiTy@olt3V$gMtyX@FB0U@9tu-?`1~<|hg2+>t%Jb7hc|MHk)BVU&B2Qr|505kKg)qwVVU(x)tCxv9g{eI5 z+u=p!Df|-n#Vm#UX>DT(_ZPqu1n?XIjQW%Dhg@F)J(&U!J{Q2Ywp@RYJl{4J*-#Yo zjYsXX&xcX|D3Q-0@)V}>N`X8dMtS<2yOPLLn9B3>8v{r_ zjPgUgxcr|a@)V}>e0x!z52L)C$Uh+R6sGd*WDR*h80Gme%F}(5*05iP{ei;BkL{oC zYaxvCd>G~Fev6dIQ<%zAe-A3phf$vH(~Kta6xIP;SAV4bAXFb8MtyX@r*6!YI#&QJ(HE9U$@)rtPnyPOI;-L6n;~Ax}Wu! z$WxfgLvv>@gfV?SjP}!gu$J~*d!R6tf1Ukw|15;aQ<%#0)2l0ey6=`wUbZ#$8vFqP-`AGDtjqdeUwyg=kBOy#LR48kZ+;g`VgWea8Q z$F;4-FwuBH9n$l!b_fFxJLr3Ifx8`8)#CbF|M9hQ#T9{vHC; zef~=b!`W?lG-uC!0>{R1uoEuLND2=deQ@oqw=>s|ctGRo8StC+yE#GL){1g7gt4T0(Ua2|o_ zdT#@P>H6&$f$4he27&4N$_6&@F@3sT>PTQZKL-++&bQ$Nrt_zPz;r&$CorAg))JV` zS0@Ne=bvf<)A_^$4oJ`*IzL1bn2z@v0@Lx^NMJf1mk^kar`rik$H!9yrsLf$0@Lx! zt`V0$9gn&Yn2s;81g7J~R07lfzk$HCKOZJA?VmRZO#53S7f6rSpE@AS>rXxi^ZJt% zVW>kUgliu%fZM_1JWwirl zEregYEEcH$z$gM!e}U-)rv3q+qdc#_?jkVlucr{^_19Yjrv23#9vqNP`)gYQ z)Bf5UU>ES&xHpU|kAVcHetUxnO#Sxa5Eelqa6z+UQV5;;_i0&r&HB55z;yk*oWOKF z{4Ig$cfxl840>VJ!(HVZY(?RF9E?e`mm>_+e10(p!&3@(g$U>g0=iy6pC^Df2;k!a z___do!NKPAn?hUS+vmf<(1N+Ep8$>%@Mj34mvOKSP4A)r{!_sJSU|UL z#@cU|?;wEt2;evYoGO5)afVBd6ssLUjfOiVu9|bUeUx05Pem{T@J2huvbAFo&U@b2i!hz`@)Ui>Is0mC)|N>_kz1O+In^)^K-)yBpjRxKa1N+a@vNn*c9X>V36v;^P~p%=8@vFL^4Z z>5;zm63iU%nxsnYlWw7c{xbqlrA*Vnxq@#ZzP}Etb*fBdG91S#%t`c^Fh!Z6P^W5B zRIp90O-`MlNSQc6KSilaO;Pv`%21^x`?5!l>B?jkoa5=ul0Fky;t1|tWFeZ{AJ+F! zJ zI%Md(x&Mt)Nv&-m|Kk;PBv$i|a9u=;?_kuykj{NQqYerrOUtzms>QqbP)8Og;FdK_ zi2NhaIvFBIN=JZmfF;d`_nJSOMm=0Lr9hIahmYhJ{J|u%?UoO>B!JuQ$#DRg_Nj)Et$O z6Ef~-wgyel%i!?Z{Ax4%#f6$9LV2o218<1S;h*lo(Ow$-BRTr@1$>nm|F@qeSudXe z{cAF?WNIcW}-_WX9X zV86)nZ<{Tk^U-M%CXu)E0lVVkmNoxF<^wIv^*DI`ho=S0^>?jlN4P+@n6w1b2D@PA zulsrZpUBm-Os7v!ujcx%F8YNt*8hZgjP-F#V&rU?i8CJf^QDkQLv3d_IrW9(yZD-Y z+=R>YVeF#0)}o%S-Z_`My8U!5pXh3R=15TOe2;ERN${>_y?bk6E&VtJ`Z#y%I+3sp zCqCFhl|0W~A<4oExE|sw#A!KNJmtp3QHNilLe7hqSkG_&X4hW}cg*@+vY{=!#xoc= zpbm+KoLiE>iAj99ho4&7ggYhT${jpAlF8Z zG=G_lTR@{K7#fMsaScDu*_iV?B@U;SF2`nw_!`&q?f|0c$Y=4ofZ1=A>sz(GlL_9k zImhC+!`OLN_&`zfxiR91O!zF_k~vv|BhLLCj`}E5h;>fp1H4BjqPo_jl;zVAYo^5< z2p9_oWK_@hJbsPKF?H>&^?m?7A9;4!xfFKFLjk5|IOtvi=MAF1xbY5A5%3`F22n)d zrGQ%kH=awtiF#gXGm-gKFD46jn-%FQ#wvbw%5l$;58p{!(7~f^%A}oN+ogd(t?Tx+ zr(WJ)Jv`L++?ftTCm!C^Ze@?o&X-z!@_E0hjt3hWJ|B8*?<1eYLidInw(a|}-JMPs z2KV&cS+1!%_s8JI71a&iwK1+KIdRBlyuGgJ-#>iXA-ce2?Z|6JyIU)6oO$B8qW#D=K1Hj%x8>fNKE~rO*`SDs43gwFaA56dD6+FE$(7_< zi9~)*5{Cx1-5Ob2wX$XS3?NaG*QmQB&&EcQXLY;8+Dc?)W$!*^{kr{&J2*=knpKIM zKyU)9$2!5LK~t-QIKQTn#ti^)Z0d+xbV_lgI?2b+OVSaMPEFf#$WW!u0N=*t_V2{d zk?^~`h8(}`1$+$`TGUF+oGX=ZyqSg@#`V! z#!5POH1GV0Bg4e?B}5H!evLsiH_rUrV7bx!O7cV={1Oq_GS+z_7Y6W-R(T>3W6T`Z zVDwVy-8G)wtX9i^(GM&Q+-#cZIIuy->1!7ayfv)R!mqw|SUTt zpM{i4xYvtT&-g+zW3{9$6kFRyHqC9CjcRdc)rm_VELrJV@nX;H z9^LQ%)*@cwg5;(mQMHYNxgdqjBJxJ#PnHtSZd8vIeF!^;Pgi+n=9csw|Iy8Sqb z4>Gj3=`86a@hs_3(tcLkRD(eq?Ng7<;Tc{*QBZVx+V8 z^nkm}l-A#7Zrrx@yJ1(>wf?lM<;O#uMyB}gAFyr9!Tg|mS?Pv@KAywxE?r}-8UJ97 zY;A-6-@SXSefx;;Y1cn~*x7Zv*aJSLeBn@R#t*@r=8s*?RDITKuB`9;E&Xm5=lU#K zI{rcSPY)V7#tm5YY}mPWn`SO5^4~o&+E|tCUa@iMpj}fUTF+c%{Ha-G;mJhPqfH|Z zcDL;s{*}}Dq3f+&dTuN{tVl419qFvMyPNlW%tI}V1K&yVtXFg6fXIqpM&Q8w?-~Fk zy(B&T1O5GaN&g17@x`$&MotZ9QcE6MLu7vr~V;laJ9O&sb)a{+NTRwXHX!(j0 zvAgyq#-_}-|5p6?$Bo^^8tt}$BFWtCp(k8E4gR}Zq<5>bmp^UY+35VZHfMhf-Wv3; z2QH161x{agXzpV;)4$=x3C%aGes96xxP*OQ`AWAudH$RB_>I+3;nUhjO^#hGH6Aof zaB|I;&JLI}<7-Lc?RRbb=caC%-}bUnU!5{exjXV)=4S!Tlq<77I?{vd>3O0lF!p5% zx>|$Uox5f*sIzOow(sYOaH44|w#gIOLy9m}i5N07B_-R6Bs1##Y#O2W$2aNEfUgdKo%1NPILOeE!M&Z^$qa7eAH=Bvfq;T5p+#<_!`se zlc*lq+waU>cIoe|W%o0G&XNq<*S;XXp!FxggL~g!zbs^4_tRe&H#xWGfqvQDpOamF z%o*16+^PXjv#TeU+1;MnH{TQ|KGo;o*L#-^bDUh=?ZrE5Z5=*n5i+uIJHx5%CeMC@ zSD(>zymss4cI_3H@T;AV{*|76=Z~!|TCBS?%_Hz=r!(hW&Q3nPs-tJ)$169^*UuP# zsP$+E-v!@136tF$-)Du}!(guz@tlB3j~nKlxO{81@6)(RqmxUM0xXz>w-&% zMi+MJTMpZLzSs19vlGs*{bZ;Apy%h#ytiW7$`RXJf4^{0$0l75yR_XFy?k6!+0fh; zv0u(PbK&}natFKKn=>*xNb+nIFoZ>tWsKrP^Es`)(m&)E6)t1`gG&f@b>rtB;0Mba zi9`Z}n_nM^pM-*v8F_xKB<>9y9Ts>Q7vArlED||8)-3YsTl(M%imb4L#IfKjA|9+$ zWGd+b&B;PX%{qt2S+mX=JP3N%tJgU{A6}kj^=tm2$01Rb55D>vA9IIRm0{G-af1a_ z6+b^SJ~}g{(GR=-zMy{Ld!+wWmp1E^6)k^Auu|ra`SQ;rJ#yo|cs{1n+2hOp{GKuD zSB6X*P{qEkr zviqxoG9IZTzIRaVuTn6(#Ugn4RH}wbo9FlCH1Rh03A$3 zA{(qz9|}uEvpmQeMU$l0@KeU~O; zi8GFT>`KW>!dNVm>RedmiP(h?4wbfG9*m7IEk??F5^riBjFfGNeRU3$!g131f9E)9 zu@JP&l{Ci!?Suhaa@>Ilb{U;OIWJa=7-4YOnaSo+VWV{iO=dh{UcqTX6LvUldfQE&CA~9_MQDn`;@&Bb>747VxV~iTKOYC) z|1x!J?NlD#EmLnP82odUWv?4yzXViX5`Y&_a}R^guh zvr|{*xt2=uTz5BcBD)R_u2zlw@?19na;>>YVJjlfbqSz8vJye9@V6r-^CU$!C1Y&f zl_WyrYGB*d+QznlqyvxFrrCg1|J-{|>~W!D&K}diW5?uQZ9H|&%6`c9mB|CM_nmQf z!HolcrNXnH$jX5^G25|;X2ib+l;kyp#%pT@4>>orhW{BSJC zEehw(IKe8#=Ksy{Z`f<#77Bj;yep7%nzOE1ja_l@l?V7Q zAaU{0bnbWj?{8;ppO_G|Fw!>sodHuy+9Xt;JrNn&>W^nt8&>vtF!t%d#T9Eh4jxvi zzLa(?S7$wB@UY#Ye;oGYthArAc1-S}gUJCas)s}^9?-tspn1D5&dj%8DbiTq*KMkp zr|SGcE3Ks4xG^znx`!@bDN31B{PozG_NUYfBqKbIcU`^6^G0Nc=dE>`9-0Rm_<@6wGM2aYaxtya7Bv>*O_e1c!9$F}pgnqAS{&z|FS-0s8tJ7sA@ zGal~sS~}HfLi4A$qOT7-)bZf1-@nPUpR(@H+Koqqk;Rr@~Py{5^n{BJ^kku~4+ zZl{D@w;S#so|srz`Nej(-iI1*yS>_a`e$^S-v{&P_q=J^q5odb=U@7F9k62k`!OA^ zu38cl+3yw8bkF0RVvb+#UC?J`qSuqB*ScK3-)13bd^=5BKF$Q-wA|jNyQHhcyTq%c zqj~LQxxa(|pbMUY(zUfWdFq|p?FC(%eO9toE9YMMEYsg^N|+$Wfwf{%K)zFY)mAn@*e__|4|H?VVDq33GNaTvMhy|&$s zw{%#0e!%SDs|jPHoAg<=a75W9UHOwuH*?mkeSB~Imd+iszjvwsrRvGN={wy9Xe-X{`bg)M<)h2ic~mdRAEj)2-=*&-KVH8R-a`J{l`&4E zMIE1C|Krg&!Mp#py5i{3tB+N4-iuGNm(2L82%t+pV7eFXl#kW2W?-?7;y%hYY!3oW*PEii~TbDJ;E-c#Tv13<n2YZSA^dCq`}=nYO0t-oZ^z zZ;I!+ANDp}vyV1<4ayn!X#8*Ci7THEj~usPNc7G>PwTf{uzCNt5ug3Iy5-o7lb58e zxOUsnBWys0Vt`%vw4NDWOG1`qtSFP*8M-%Xe%*&wbuQZevxim=^=(M>`uXAI_u}l1 zc%I8%rriDanbB1{rnmMyyz0ca>%FU<{HiVN(D(0)0m~2QLeB;d8vgOFf3=;r;O7j} zfw9XU{y6v2q)9=)-in`kr`hDc&kk5vmOdq3em``cYkB6FWsGy%n4|rVKfCdG{{Y?g z9hWP6e(6@SX-vvG=Z(wSDYyLQA{o@PYSSsvskOfj(r0`yJhWixc-KptI{!R5Ak&IuZvJ>5>}=b-W)OD$b-{2o(=r`x>xSjpvh+s{QlH`Mw$OA+0}UsR=2#q<;Q+Q zuT&gs^vzdGPUidNSq+4tpdY&-QTU(jZdUf@$4TCv#EiL;R^}&R*pz5!@x=RI+?IH} za9rV<9nOk38HMG^ zk5qG4XI}g*CHQ)u%0IX5e`j-pl5q=k;HXZ?>B_Hd{Kqu=Y~1z* zSX`xZ&=O6f6eXENwdFLz3b2I os-T35(7X56zg#(T{iHSn`wdQ5tiCffAYdiyQStWY|ECi8KmQY(2mk;8 literal 0 HcmV?d00001 diff --git a/lib/agent/providers/geo/index.js b/lib/agent/providers/geo/index.js index 4a33c0b92..67d876582 100644 --- a/lib/agent/providers/geo/index.js +++ b/lib/agent/providers/geo/index.js @@ -15,22 +15,28 @@ var join = require('path').join, var get_using_corelocation = function(cb) { - var bin = join(__dirname, 'darwin', 'LocateMe'); + // whereami bin from https://github.com/robmathers/WhereAmI + var bin = join(__dirname, 'darwin', 'whereami'); - // options in http://iharder.sourceforge.net/current/macosx/locateme/ - exec(bin + ' -f "{LAT},{LON},{ALT},{HAC},{VAC}"', function(err, out) { + exec(bin, function(err, out) { if (err) return cb(err); - var list = out.toString().split(','); - if (!list[1]) + if (!out.toString().match('Latitude')) return cb(new Error('Unable to get geoposition data using CoreLocation.')); + var match, str = out.toString(); + var res = { - lat: list[0], - lng: list[1], - altitude: list[2], - accuracy: list[3], - vertical_accuracy: list[4] + lat: str.match(/Latitude: (.+)/)[1], + lng: str.match(/Longitude: (.+)/)[1] + } + + if (match = str.match(/\nAccuracy.*: (.+)/)) { + res.accuracy = match[1]; + } else if (match = str.match(/Horizontal Accuracy.*: (.+)/)) { + res.accuracy = match[1]; + res.vertical_accuracy = str.match(/Vertical Accuracy.*: (.+)/)[1]; + res.altitude = str.match(/Altitude.*: (.+)/)[1]; } cb(null, res); From c430eefefe14344d31f6bab067805ff2d00c8000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Pollak?= Date: Wed, 17 Sep 2014 08:23:23 -0700 Subject: [PATCH 03/25] CoreLocation only supported above 10.6 --- lib/agent/providers/geo/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/agent/providers/geo/index.js b/lib/agent/providers/geo/index.js index 67d876582..12134dd6b 100644 --- a/lib/agent/providers/geo/index.js +++ b/lib/agent/providers/geo/index.js @@ -10,6 +10,7 @@ var join = require('path').join, exec = require('child_process').exec, client = require('needle'), + release = require('os').release, get_agent = require('random-ua').generate, providers = require('./../../providers'); @@ -94,7 +95,7 @@ exports.send_data = function(list, cb){ exports.get_location = function(cb) { - if (process.platform == 'darwin') + if (process.platform == 'darwin' && parseFloat(release()) > 10.6) return get_using_corelocation(cb); providers.get('access_points_list', function(err, list) { From 9cc29a4003b971fc8cd929e0a5f8ce2c89f3d839 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Pollak?= Date: Wed, 17 Sep 2014 13:13:08 -0700 Subject: [PATCH 04/25] Use os_version to determine whether to use CoreLocation or not. --- lib/agent/providers/geo/index.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/agent/providers/geo/index.js b/lib/agent/providers/geo/index.js index 12134dd6b..5135e9446 100644 --- a/lib/agent/providers/geo/index.js +++ b/lib/agent/providers/geo/index.js @@ -10,8 +10,8 @@ var join = require('path').join, exec = require('child_process').exec, client = require('needle'), - release = require('os').release, get_agent = require('random-ua').generate, + system = require('./../../common').system, providers = require('./../../providers'); var get_using_corelocation = function(cb) { @@ -95,13 +95,15 @@ exports.send_data = function(list, cb){ exports.get_location = function(cb) { - if (process.platform == 'darwin' && parseFloat(release()) > 10.6) - return get_using_corelocation(cb); + system.get_os_version(function(err, version) { + if (process.platform == 'darwin' && version && parseFloat(version) >= 10.6) + return get_using_corelocation(cb); - providers.get('access_points_list', function(err, list) { - if (err) return cb(err); + providers.get('access_points_list', function(err, list) { + if (err) return cb(err); - exports.send_data(list, cb); + exports.send_data(list, cb); + }); }); }; From 5e814df27d7cc0998b5040e34ab121a16580423d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Pollak?= Date: Fri, 17 Oct 2014 19:25:34 -0700 Subject: [PATCH 05/25] Start moving platform-specific geolocation strategy to separate files. --- .../providers/geo/darwin/{ => bin}/whereami | Bin lib/agent/providers/geo/darwin/index.js | 45 ++++++++++++++++++ 2 files changed, 45 insertions(+) rename lib/agent/providers/geo/darwin/{ => bin}/whereami (100%) create mode 100644 lib/agent/providers/geo/darwin/index.js diff --git a/lib/agent/providers/geo/darwin/whereami b/lib/agent/providers/geo/darwin/bin/whereami similarity index 100% rename from lib/agent/providers/geo/darwin/whereami rename to lib/agent/providers/geo/darwin/bin/whereami diff --git a/lib/agent/providers/geo/darwin/index.js b/lib/agent/providers/geo/darwin/index.js new file mode 100644 index 000000000..2bd9ba384 --- /dev/null +++ b/lib/agent/providers/geo/darwin/index.js @@ -0,0 +1,45 @@ +var join = require('path').join, + exec = require('child_process').exec, + system = require('../../../common').system; + +// whereami bin from https://github.com/robmathers/WhereAmI +var bin = join(__dirname, 'bin', 'whereami'); + +var get_using_corelocation = function(cb) { + + exec(bin, function(err, out) { + if (err) return cb(err); + + if (!out.toString().match('Latitude')) + return cb(new Error('Unable to get geoposition data using CoreLocation.')); + + var match, str = out.toString(); + + var res = { + lat: str.match(/Latitude: (.+)/)[1], + lng: str.match(/Longitude: (.+)/)[1] + } + + if (match = str.match(/\nAccuracy.*: (.+)/)) { + res.accuracy = match[1]; + } else if (match = str.match(/Horizontal Accuracy.*: (.+)/)) { + res.accuracy = match[1]; + res.vertical_accuracy = str.match(/Vertical Accuracy.*: (.+)/)[1]; + res.altitude = str.match(/Altitude.*: (.+)/)[1]; + } + + cb(null, res); + }) + +} + +exports.get_location = function(cb) { + + system.get_os_version(function(err, version) { + if (version && parseFloat(version) >= 10.6) + return get_using_corelocation(cb); + + cb(new Error('CoreLocation not suppored in OSX ' + version)) + }); + +} \ No newline at end of file From ed437ac6cbc02e46891666a57c90f10ddb1b2694 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Pollak?= Date: Fri, 17 Oct 2014 19:32:02 -0700 Subject: [PATCH 06/25] Removed Google Geolocation strategy. Use system native method, and fallback to GeoIP on failure. --- lib/agent/providers/geo/index.js | 111 +++++-------------------------- 1 file changed, 15 insertions(+), 96 deletions(-) diff --git a/lib/agent/providers/geo/index.js b/lib/agent/providers/geo/index.js index 5135e9446..a7c58ee25 100644 --- a/lib/agent/providers/geo/index.js +++ b/lib/agent/providers/geo/index.js @@ -1,109 +1,28 @@ "use strict"; -////////////////////////////////////////// -// Prey JS Geo Module -// (c) 2011 - Fork Ltd. -// by Tomas Pollak - http://forkhq.com -// GPLv3 Licensed -////////////////////////////////////////// +var join = require('path').join, + needle = require('needle'), + platform = require(join(__dirname, process.platform)); -var join = require('path').join, - exec = require('child_process').exec, - client = require('needle'), - get_agent = require('random-ua').generate, - system = require('./../../common').system, - providers = require('./../../providers'); - -var get_using_corelocation = function(cb) { - - // whereami bin from https://github.com/robmathers/WhereAmI - var bin = join(__dirname, 'darwin', 'whereami'); - - exec(bin, function(err, out) { - if (err) return cb(err); - - if (!out.toString().match('Latitude')) - return cb(new Error('Unable to get geoposition data using CoreLocation.')); - - var match, str = out.toString(); +function geoip(cb) { + // console.log('Getting GeoIP...'); + needle.get('http://ipinfo.io/geo', function(err, resp, body) { + if (!body || body.log) + return cb(err || new Error('Unable to get location from IP.')) var res = { - lat: str.match(/Latitude: (.+)/)[1], - lng: str.match(/Longitude: (.+)/)[1] - } - - if (match = str.match(/\nAccuracy.*: (.+)/)) { - res.accuracy = match[1]; - } else if (match = str.match(/Horizontal Accuracy.*: (.+)/)) { - res.accuracy = match[1]; - res.vertical_accuracy = str.match(/Vertical Accuracy.*: (.+)/)[1]; - res.altitude = str.match(/Altitude.*: (.+)/)[1]; + lat: parseFloat(body.loc.split(',')[0]), + lng: parseFloat(body.loc.split(',')[1]) } cb(null, res); }) - } -var process_response = function(body, cb){ - var coords; - - if (typeof body === 'object') { - coords = body; - } else { - try { - coords = JSON.parse(body); - } catch(e) { - return cb(e); - } - } - - if (!coords.location || (!coords.location.lat && !coords.location.latitude)) - return cb(new Error("Couldn't get any geoposition data. Try moving around a bit.")); - - var data = { - lat: coords.location.lat || coords.location.latitude, - lng: coords.location.lng || coords.location.longitude, - accuracy: coords.accuracy || coords.location.accuracy, - method: 'wifi' - }; - - cb(null, data); -}; - - -exports.send_data = function(list, cb){ - - var aps = []; - - list.slice(0, 30).forEach(function(ap){ - var str = 'wifi=mac:' + ap.mac_address + '|ssid:' + encodeURIComponent(ap.ssid); - str += '|ss:' + ap.signal_strength; - aps.push(str); - }); - - var opts = { user_agent: get_agent() }, - url = 'https://maps.googleapis.com/maps/api/browserlocation/json?', - query = url + 'browser=true&sensor=true&' + aps.join('&'); - - client.get(query, opts, function(err, resp, body) { - if (err) return cb(err); - process_response(body, cb); - }); - -}; - exports.get_location = function(cb) { + platform.get_location(function(err, res) { + if (res) return cb(null, res); - system.get_os_version(function(err, version) { - if (process.platform == 'darwin' && version && parseFloat(version) >= 10.6) - return get_using_corelocation(cb); - - providers.get('access_points_list', function(err, list) { - if (err) return cb(err); - - exports.send_data(list, cb); - }); - }); - -}; + geoip(cb); + }) +} From 35783898af10822faa05f299f3d76fb42b386176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Pollak?= Date: Fri, 17 Oct 2014 19:32:22 -0700 Subject: [PATCH 07/25] Added Linux geolocation strategy using GeoClue via dbus-send. --- lib/agent/providers/geo/linux/index.js | 85 ++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 lib/agent/providers/geo/linux/index.js diff --git a/lib/agent/providers/geo/linux/index.js b/lib/agent/providers/geo/linux/index.js new file mode 100644 index 000000000..60ca724ba --- /dev/null +++ b/lib/agent/providers/geo/linux/index.js @@ -0,0 +1,85 @@ +// geolocation provider using geoclue service + +var exec = require('child_process').exec; + +/* + +valid dbus reply format: + + int32 # number of fields + int32 # timestamp + double # lat + double # lng + double # altitude + struct { # accuracy + int32 3 + double 0 + double 0 + } + +*/ + +function parse(out, cb) { + var matches = out.match(/double ([\d\.-]+)/g); + if (matches < 2) + return cb(new Error('Unable to get location.')) + + var res = { + lat: parseFloat(matches[0].replace('double ', '')), + lng: parseFloat(matches[1].replace('double ', '')), + altitude: parseFloat(matches[2].replace('double ', '')) + } + + cb(null, res); +} + +function get_command_one(provider) { + var bin = 'dbus-send', + service = 'org.freedesktop.Geoclue.Providers.' + provider, + path = '/org/freedesktop/Geoclue/Providers/' + provider, + command = 'org.freedesktop.Geoclue.Position.GetPosition'; + + return [bin, '--print-reply', '--dest=' + service, path, command].join(' '); +} + + +function geoclue_one(provider, cb) { + // console.log('Trying with provider: ' + provider); + var cmd = get_command_one(provider); + + exec(cmd, function(err, out) { + if (err) return cb(err); + + parse(out, cb); + }) +} + +function get_command_two() { + var bin = 'dbus-send', + service = 'org.freedesktop.GeoClue2', + path = '/org/freedesktop/GeoClue2', + command = 'org.freedesktop.GeoClue2.Location'; + + return [bin, '--print-reply', '--dest=' + service, path, command].join(' '); +} + +function geoclue_two(cb) { + exec(get_command_two, function(err, out) { + if (err) return cb(err); + + parse(out, cb); + }) +} + +exports.get_location = function(cb) { + geoclue_two(function(err, res) { + if (res) return cb(null, res); + + geoclue_one('Skyhook', function(err, res) { + if (res) return cb(null, res); + + // cb(err || new Error('Unable to get location.')); + geoclue_one('UbuntuGeoIP', cb); + }); + }) +} \ No newline at end of file From fad511ec5eaf7ea84b6aaeb597ae9b5dea1d4888 Mon Sep 17 00:00:00 2001 From: Tomas Pollak Date: Fri, 17 Oct 2014 21:39:05 -0500 Subject: [PATCH 08/25] Added win32 geoloc strategy using WinRT module. --- lib/agent/providers/geo/win32/index.js | 38 +++ .../windows.devices.geolocation/.npmignore | 6 + .../windows.devices.geolocation/README.md | 35 +++ .../build/Release/binding.node | Bin 0 -> 168960 bytes .../NodeRT_Windows_Devices_Geolocation.d.js | 246 ++++++++++++++++++ .../NodeRT_Windows_Devices_Geolocation.d.ts | 162 ++++++++++++ .../windows.devices.geolocation/lib/main.js | 54 ++++ .../windows.devices.geolocation/package.json | 76 ++++++ 8 files changed, 617 insertions(+) create mode 100644 lib/agent/providers/geo/win32/index.js create mode 100644 lib/agent/providers/geo/win32/windows.devices.geolocation/.npmignore create mode 100644 lib/agent/providers/geo/win32/windows.devices.geolocation/README.md create mode 100644 lib/agent/providers/geo/win32/windows.devices.geolocation/build/Release/binding.node create mode 100644 lib/agent/providers/geo/win32/windows.devices.geolocation/lib/NodeRT_Windows_Devices_Geolocation.d.js create mode 100644 lib/agent/providers/geo/win32/windows.devices.geolocation/lib/NodeRT_Windows_Devices_Geolocation.d.ts create mode 100644 lib/agent/providers/geo/win32/windows.devices.geolocation/lib/main.js create mode 100644 lib/agent/providers/geo/win32/windows.devices.geolocation/package.json diff --git a/lib/agent/providers/geo/win32/index.js b/lib/agent/providers/geo/win32/index.js new file mode 100644 index 000000000..72d359dab --- /dev/null +++ b/lib/agent/providers/geo/win32/index.js @@ -0,0 +1,38 @@ +var geo; + +function load_geo() { + if (geo) + return geo; + + try { + geo = require('./windows.devices.geolocation'); + return geo; + } catch(e) { + return e; + } + + return geo; +} + +exports.get_location = function(cb) { + var geo = load_geo(); + + if (!geo.Geolocator) + return cb(new Error('Unable to load geolocation module: ' + geo.message)) + + var loc = new geo.Geolocator(); + loc.getGeopositionAsync(function(err, res) { + if (err || !res.coordinate) + return cb(err || new Error('Unable to get location.')) + + // console.log('Got result!'); + + var obj = { + lat: res.coordinate.latitude, + lng: res.coordinate.longitude + } + + cb(null, obj); + }) + +} diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/.npmignore b/lib/agent/providers/geo/win32/windows.devices.geolocation/.npmignore new file mode 100644 index 000000000..f5c9ab246 --- /dev/null +++ b/lib/agent/providers/geo/win32/windows.devices.geolocation/.npmignore @@ -0,0 +1,6 @@ +*.vcxproj +*.filters +*.user +Debug +Release +test \ No newline at end of file diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/README.md b/lib/agent/providers/geo/win32/windows.devices.geolocation/README.md new file mode 100644 index 000000000..738582c3f --- /dev/null +++ b/lib/agent/providers/geo/win32/windows.devices.geolocation/README.md @@ -0,0 +1,35 @@ +windows.devices.geolocation +===== + +A Node.js wrapper for the Windows.Devices.Geolocation WinRT namespace, compatible with Windows 8.1. + +Using this module, you'll be able to consume the Windows.Devices.Geolocation API directly from Node.js. + +This module was automatically generated by NodeRT. +For more information on NodeRT and examples on how to use NodeRT modules, please visit the project page at: https://github.com/NodeRT/NodeRT. + +The API exposed by this module is (almost) the same as the API that is listed in: http://msdn.microsoft.com/en-us/library/windows/apps/Windows.Devices.Geolocation.aspx + +The only difference in the API is in the way that asynchronous methods and events are used. (See https://github.com/NodeRT/NodeRT#ConsumingNodeRT for more details) + +This module also contains TypeScript definition files for the API exposed by the module, as well as JavaScript intellisense support for Node.js tools for Visual Studio. + +Prequisites: +============ +* Visual Studio 2013, or VS 2013 Express for Windows Desktop. +* node-gyp. (Make sure to also have python installed). + +Installation: +============= +In order to install this module, run npm install: + +``` +npm install windows.devices.geolocation +``` + +If you wish to rebuild this module using node-gyp, make sure to use the --msvs_version=2013 flag: + +``` +cd [module folder path] +node-gyp rebuild --msvs_version=2013 +``` \ No newline at end of file diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/build/Release/binding.node b/lib/agent/providers/geo/win32/windows.devices.geolocation/build/Release/binding.node new file mode 100644 index 0000000000000000000000000000000000000000..d1906f470620c0500f08b0c9121656f2e789bc5d GIT binary patch literal 168960 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 Y-grc(jUuBFIk + ///

Function summary. + /// + } + +cls.prototype.getGeopositionAsync = function getGeopositionAsync(maximumAge, timeout, callback) { + /// + /// Function summary. + /// A param. + /// A param. + /// + } + + + cls.prototype.addListener = function addListener(eventName, callback){} + cls.prototype.removeListener = function removeListener(eventName, callback){} + cls.prototype.on = function on(eventName, callback){} + cls.prototype.off = function off(eventName, callback){} + return cls; +}) (); +exports.Geolocator = Geolocator; + +Geocircle = (function () { + var cls = function Geocircle() { + this.center = new BasicGeoposition(); + this.radius = new Number(); + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); + }; + +var cls = function Geocircle(position, radius) { + this.center = new BasicGeoposition(); + this.radius = new Number(); + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); +}; + +var cls = function Geocircle(position, radius, altitudeReferenceSystem) { + this.center = new BasicGeoposition(); + this.radius = new Number(); + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); +}; + +var cls = function Geocircle(position, radius, altitudeReferenceSystem, spatialReferenceId) { + this.center = new BasicGeoposition(); + this.radius = new Number(); + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); +}; + + + return cls; +}) (); +exports.Geocircle = Geocircle; + diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/NodeRT_Windows_Devices_Geolocation.d.ts b/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/NodeRT_Windows_Devices_Geolocation.d.ts new file mode 100644 index 000000000..15561796d --- /dev/null +++ b/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/NodeRT_Windows_Devices_Geolocation.d.ts @@ -0,0 +1,162 @@ +declare module "windows.devices.geolocation" { + export class BasicGeoposition { + latitude: Number; + longitude: Number; + altitude: Number; + constructor(); + } + + export enum PositionAccuracy { + default, + high, + } + + export enum PositionStatus { + ready, + initializing, + noData, + disabled, + notInitialized, + notAvailable, + } + + export enum PositionSource { + cellular, + satellite, + wiFi, + iPAddress, + unknown, + } + + export enum GeoshapeType { + geopoint, + geocircle, + } + + export enum AltitudeReferenceSystem { + unspecified, + terrain, + ellipsoid, + geoid, + surface, + } + + export class IGeoshape { + altitudeReferenceSystem: AltitudeReferenceSystem; + geoshapeType: GeoshapeType; + spatialReferenceId: Number; + constructor(); + + } + + export class Geopoint { + position: BasicGeoposition; + altitudeReferenceSystem: AltitudeReferenceSystem; + geoshapeType: GeoshapeType; + spatialReferenceId: Number; + constructor(); + constructor(position: BasicGeoposition); + constructor(position: BasicGeoposition, altitudeReferenceSystem: AltitudeReferenceSystem); + constructor(position: BasicGeoposition, altitudeReferenceSystem: AltitudeReferenceSystem, spatialReferenceId: Number); + + } + + export class GeocoordinateSatelliteData { + horizontalDilutionOfPrecision: Number; + positionDilutionOfPrecision: Number; + verticalDilutionOfPrecision: Number; + constructor(); + + } + + export class Geocoordinate { + accuracy: Number; + altitude: Number; + altitudeAccuracy: Number; + heading: Number; + latitude: Number; + longitude: Number; + speed: Number; + timestamp: Date; + positionSource: PositionSource; + satelliteData: GeocoordinateSatelliteData; + point: Geopoint; + constructor(); + + } + + export class CivicAddress { + city: String; + country: String; + postalCode: String; + state: String; + timestamp: Date; + constructor(); + + } + + export class Geoposition { + civicAddress: CivicAddress; + coordinate: Geocoordinate; + constructor(); + + } + + export class PositionChangedEventArgs { + position: Geoposition; + constructor(); + + } + + export class StatusChangedEventArgs { + status: PositionStatus; + constructor(); + + } + + export class Geolocator { + reportInterval: Number; + movementThreshold: Number; + desiredAccuracy: PositionAccuracy; + locationStatus: PositionStatus; + desiredAccuracyInMeters: Number; + constructor(); + + getGeopositionAsync(callback: (error: Error, result: Geoposition) => void): void ; + getGeopositionAsync(maximumAge: Number, timeout: Number, callback: (error: Error, result: Geoposition) => void): void ; + + addListener(type: "PositionChanged", listener: (ev: Event) => void): void ; + removeListener(type: "PositionChanged", listener: (ev: Event) => void): void ; + on(type: "PositionChanged", listener: (ev: Event) => void): void ; + off(type: "PositionChanged", listener: (ev: Event) => void): void ; + + addListener(type: "StatusChanged", listener: (ev: Event) => void): void ; + removeListener(type: "StatusChanged", listener: (ev: Event) => void): void ; + on(type: "StatusChanged", listener: (ev: Event) => void): void ; + off(type: "StatusChanged", listener: (ev: Event) => void): void ; + + addListener(type: string, listener: (ev: Event) => void): void ; + removeListener(type: string, listener: (ev: Event) => void): void ; + on(type: string, listener: (ev: Event) => void): void ; + off(type: string, listener: (ev: Event) => void): void ; + + + } + + export class Geocircle { + center: BasicGeoposition; + radius: Number; + altitudeReferenceSystem: AltitudeReferenceSystem; + geoshapeType: GeoshapeType; + spatialReferenceId: Number; + constructor(); + constructor(position: BasicGeoposition, radius: Number); + constructor(position: BasicGeoposition, radius: Number, altitudeReferenceSystem: AltitudeReferenceSystem); + constructor(position: BasicGeoposition, radius: Number, altitudeReferenceSystem: AltitudeReferenceSystem, spatialReferenceId: Number); + + } + +} + + + diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/main.js b/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/main.js new file mode 100644 index 000000000..f7aa75eff --- /dev/null +++ b/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/main.js @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation +// All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the ""License""); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 +// +// THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. +// +// See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. +var path = require('path'); +var fs = require('fs'); + +try { + // this little trick makes node.js Tools for VS load intellisense for the module + if (fs.existsSync(path.join(__dirname, 'NodeRT_Windows_Devices_Geolocation.d.js)'))) { + module.exports = require('./NodeRT_Windows_Devices_Geolocation.d.js'); + } + module.exports = require('../build/release/binding.node'); +} +catch(e) { + throw e; +} + +var externalReferencedNamespaces = []; + + +if (externalReferencedNamespaces.length > 0) { + var namespaceRegistry = global.__winRtNamespaces__; + + if (!namespaceRegistry) { + namespaceRegistry = {}; + Object.defineProperty(global, '__winRtNamespaces__', { + configurable: true, + writable: false, + enumerable: false, + value: namespaceRegistry + }); + } + + function requireNamespace(namespace) { + var m = require(namespace.toLowerCase()); + delete namespaceRegistry[namespace]; + namespaceRegistry[namespace] = m; + return m; + } + + for (var i in externalReferencedNamespaces) { + var ns = externalReferencedNamespaces[i]; + Object.defineProperty(namespaceRegistry, ns, { + configurable: true, + enumerable: true, + get: requireNamespace.bind(null, ns) + }); + } +} \ No newline at end of file diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/package.json b/lib/agent/providers/geo/win32/windows.devices.geolocation/package.json new file mode 100644 index 000000000..fb8d8ecaa --- /dev/null +++ b/lib/agent/providers/geo/win32/windows.devices.geolocation/package.json @@ -0,0 +1,76 @@ +{ + "name": "windows.devices.geolocation", + "version": "0.1.6", + "description": "Use the Windows.Devices.Geolocation WinRT API directly from Node.js", + "main": "lib/main.js", + "scripts": { + "install": "node-gyp rebuild --msvs_version=2013" + }, + "keywords": [ + "Windows.Devices.Geolocation", + "Windows", + "Devices", + "Geolocation", + "IGeoshape", + "Geopoint", + "GeocoordinateSatelliteData", + "Geocoordinate", + "CivicAddress", + "Geoposition", + "PositionChangedEventArgs", + "StatusChangedEventArgs", + "Geolocator", + "Geocircle", + "PositionAccuracy", + "PositionStatus", + "PositionSource", + "GeoshapeType", + "AltitudeReferenceSystem", + "BasicGeoposition", + "NodeRT", + "WinRT", + "Microsoft" + ], + "optionalDependencies": {}, + "repository": { + "type": "git", + "url": "git://github.com/NodeRT/NodeRT.git" + }, + "homepage": "https://github.com/NodeRT/NodeRT", + "author": { + "name": "Generated by NodeRT" + }, + "contributors": [ + { + "name": "nadavbar", + "email": "nadavbar@gmail.com", + "url": "http://www.nadavos.com" + } + ], + "gypfile": true, + "license": "Apache 2.0", + "bugs": { + "url": "https://github.com/NodeRT/NodeRT/issues" + }, + "dependencies": {}, + "_id": "windows.devices.geolocation@0.1.6", + "_shasum": "5748f1a8174a6a88423c43030a7df4612cc485d8", + "_from": "windows.devices.geolocation@", + "_npmVersion": "1.4.23", + "_npmUser": { + "name": "nadavbar", + "email": "nadavbar@gmail.com" + }, + "maintainers": [ + { + "name": "nadavbar", + "email": "nadavbar@gmail.com" + } + ], + "dist": { + "shasum": "5748f1a8174a6a88423c43030a7df4612cc485d8", + "tarball": "http://registry.npmjs.org/windows.devices.geolocation/-/windows.devices.geolocation-0.1.6.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/windows.devices.geolocation/-/windows.devices.geolocation-0.1.6.tgz" +} From ab336f6e3b3e2acc76d78d98e0c8520cc07ba0a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Pollak?= Date: Thu, 11 Jun 2015 14:37:41 -0700 Subject: [PATCH 09/25] Include accuracy on WinRT geoposition success. --- lib/agent/providers/geo/win32/index.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/agent/providers/geo/win32/index.js b/lib/agent/providers/geo/win32/index.js index 72d359dab..8f6f0f413 100644 --- a/lib/agent/providers/geo/win32/index.js +++ b/lib/agent/providers/geo/win32/index.js @@ -10,8 +10,6 @@ function load_geo() { } catch(e) { return e; } - - return geo; } exports.get_location = function(cb) { @@ -29,7 +27,8 @@ exports.get_location = function(cb) { var obj = { lat: res.coordinate.latitude, - lng: res.coordinate.longitude + lng: res.coordinate.longitude, + accuracy: res.coordinate.accuracy } cb(null, obj); From d1f0bc9e343e0c04a235a8bd31f0c67b23306dbc Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Wed, 1 Jul 2015 18:17:50 -0300 Subject: [PATCH 10/25] Add strategies file with 3 main strategies for geolog so far: native, big-g and geoip --- lib/agent/providers/geo/strategies.js | 96 +++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 lib/agent/providers/geo/strategies.js diff --git a/lib/agent/providers/geo/strategies.js b/lib/agent/providers/geo/strategies.js new file mode 100644 index 000000000..818b3794f --- /dev/null +++ b/lib/agent/providers/geo/strategies.js @@ -0,0 +1,96 @@ +"use strict" + +var join = require('path').join, + needle = require('needle'), + get_agent = require('random-ua').generate, + platform = require(join(__dirname, process.platform)); + +function geoip(cb) { + // console.log('Getting GeoIP...'); + needle.get('http://ipinfo.io/geo', function(err, resp, body) { + if (!body || body.log) + return cb(err || new Error('Unable to get location from IP.')) + + var res = { + lat: parseFloat(body.loc.split(',')[0]), + lng: parseFloat(body.loc.split(',')[1]) + } + + cb(null, res); + }) +} + +function google(cb) { + + providers.get('access_points_list', function(err, list) { + if (err) return cb(err); + + send_data(list, cb); + }); + + function process_response(body, cb) { + var coords; + + if (typeof body === 'object') { + coords = body; + } else { + try { + coords = JSON.parse(body); + } catch (e) { + return cb(e); + } + } + + if (!coords.location || (!coords.location.lat && !coords.location.latitude)) + return cb(new Error("Couldn't get any geoposition data. Try moving around a bit.")); + + var data = { + lat: coords.location.lat || coords.location.latitude, + lng: coords.location.lng || coords.location.longitude, + accuracy: coords.accuracy || coords.location.accuracy, + method: 'wifi' + }; + + cb(null, data); + } + + function send_data(list, cb) { + + var aps = []; + + list.slice(0, 30).forEach(function(ap) { + var str = 'wifi=mac:' + ap.mac_address + '|ssid:' + encodeURIComponent(ap.ssid); + str += '|ss:' + ap.signal_strength; + aps.push(str); + }); + + var opts = { + user_agent: get_agent() + }, + url = 'https://maps.googleapis.com/maps/api/browserlocation/json?', + query = url + 'browser=true&sensor=true&' + aps.join('&'); + + client.get(query, opts, function(err, resp, body) { + if (err) return cb(err); + process_response(body, cb); + }); + + } + +} + +function geonative(cb) { + platform.get_location(function(err, res) { + if (err) { + return cb(err); + } + + return cb(null, res); + }); +} + +module.exports = { + 'geoip': geoip, + 'google': google, + 'native': geonative +}; From 49a2558c64b219f849d1972dd62fa484ef505f86 Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Thu, 2 Jul 2015 15:52:50 -0300 Subject: [PATCH 11/25] Implement fallback in case native geoloc fails --- lib/agent/providers/geo/index.js | 53 +++++++++++------- lib/agent/providers/geo/strategies.js | 77 +++++++++++++++++---------- 2 files changed, 82 insertions(+), 48 deletions(-) diff --git a/lib/agent/providers/geo/index.js b/lib/agent/providers/geo/index.js index a7c58ee25..3f282ff98 100644 --- a/lib/agent/providers/geo/index.js +++ b/lib/agent/providers/geo/index.js @@ -1,28 +1,41 @@ "use strict"; -var join = require('path').join, - needle = require('needle'), - platform = require(join(__dirname, process.platform)); - -function geoip(cb) { - // console.log('Getting GeoIP...'); - needle.get('http://ipinfo.io/geo', function(err, resp, body) { - if (!body || body.log) - return cb(err || new Error('Unable to get location from IP.')) - - var res = { - lat: parseFloat(body.loc.split(',')[0]), - lng: parseFloat(body.loc.split(',')[1]) - } +var strategies = require('./strategies'), + logger = require('../../common').logger.prefix('geo'); - cb(null, res); - }) +function log_error(err, strategy) { + logger.debug("Error getting location using " + strategy + " strategy: " + err); } exports.get_location = function(cb) { - platform.get_location(function(err, res) { - if (res) return cb(null, res); - geoip(cb); - }) + strategies.native(native_cb); + + function native_cb(err, res) { + if (err) { + log_error(err, "native"); + return strategies.google(google_cb); + } + + return cb(null, res); + } + + function google_cb(err, res) { + if (err) { + log_error(err, "google"); + return strategies.geoip(geoip_cb); + } + + return cb(null, res); + } + + function geoip_cb(err, res) { + if (err) { + log_error(err, "geoip"); + return cb(err); + } + + return cb(null, res); + } + } diff --git a/lib/agent/providers/geo/strategies.js b/lib/agent/providers/geo/strategies.js index 818b3794f..d790eaf44 100644 --- a/lib/agent/providers/geo/strategies.js +++ b/lib/agent/providers/geo/strategies.js @@ -3,13 +3,20 @@ var join = require('path').join, needle = require('needle'), get_agent = require('random-ua').generate, - platform = require(join(__dirname, process.platform)); + platform = require(join(__dirname, process.platform)), + providers = require('./../../providers'), + logger = require('../../common').logger.prefix('geo'); function geoip(cb) { - // console.log('Getting GeoIP...'); + + logger.debug("Getting location via geoip"); + needle.get('http://ipinfo.io/geo', function(err, resp, body) { - if (!body || body.log) - return cb(err || new Error('Unable to get location from IP.')) + if (!body || body.log) { + return cb(err || new Error('Unable to get location from IP.')); + } + + logger.debug("Got location via geoip"); var res = { lat: parseFloat(body.loc.split(',')[0]), @@ -22,13 +29,43 @@ function geoip(cb) { function google(cb) { + logger.debug("Getting location via google api"); + providers.get('access_points_list', function(err, list) { if (err) return cb(err); send_data(list, cb); }); + function send_data(list, cb) { + + logger.debug("Sending AP data to Google API"); + + var aps = []; + + list.slice(0, 30).forEach(function(ap) { + var str = 'wifi=mac:' + ap.mac_address + '|ssid:' + encodeURIComponent(ap.ssid); + str += '|ss:' + ap.signal_strength; + aps.push(str); + }); + + var opts = { + user_agent: get_agent() + }, + url = 'https://maps.googleapis.com/maps/api/browserlocation/json?', + query = url + 'browser=true&sensor=true&' + aps.join('&'); + + needle.get(query, opts, function(err, resp, body) { + if (err) return cb(err); + process_response(body, cb); + }); + + } + function process_response(body, cb) { + + logger.debug("Processing Google API response"); + var coords; if (typeof body === 'object') { @@ -44,6 +81,8 @@ function google(cb) { if (!coords.location || (!coords.location.lat && !coords.location.latitude)) return cb(new Error("Couldn't get any geoposition data. Try moving around a bit.")); + logger.debug("Got location via Google API"); + var data = { lat: coords.location.lat || coords.location.latitude, lng: coords.location.lng || coords.location.longitude, @@ -51,40 +90,22 @@ function google(cb) { method: 'wifi' }; - cb(null, data); - } - - function send_data(list, cb) { - - var aps = []; - - list.slice(0, 30).forEach(function(ap) { - var str = 'wifi=mac:' + ap.mac_address + '|ssid:' + encodeURIComponent(ap.ssid); - str += '|ss:' + ap.signal_strength; - aps.push(str); - }); - - var opts = { - user_agent: get_agent() - }, - url = 'https://maps.googleapis.com/maps/api/browserlocation/json?', - query = url + 'browser=true&sensor=true&' + aps.join('&'); - - client.get(query, opts, function(err, resp, body) { - if (err) return cb(err); - process_response(body, cb); - }); - + return cb(null, data); } } function geonative(cb) { + + logger.debug("Getting location via native geoloc"); + platform.get_location(function(err, res) { if (err) { return cb(err); } + logger.debug("Got location via native geoloc"); + return cb(null, res); }); } From f57f303a2e042b04266bedadb2921b0bd42466b0 Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Thu, 2 Jul 2015 18:03:40 -0300 Subject: [PATCH 12/25] Fix google geoloc provider specs. --- .../fixtures/google_location_response.js | 7 ++++++ .../providers/fixtures/location_response.json | 1 - .../{coordinates.js => google_strategy.js} | 24 +++++++------------ 3 files changed, 16 insertions(+), 16 deletions(-) create mode 100644 test/lib/agent/providers/fixtures/google_location_response.js delete mode 100644 test/lib/agent/providers/fixtures/location_response.json rename test/lib/agent/providers/geo/{coordinates.js => google_strategy.js} (71%) diff --git a/test/lib/agent/providers/fixtures/google_location_response.js b/test/lib/agent/providers/fixtures/google_location_response.js new file mode 100644 index 000000000..0ecb8852b --- /dev/null +++ b/test/lib/agent/providers/fixtures/google_location_response.js @@ -0,0 +1,7 @@ +module.exports = JSON.stringify({ + location: { + latitude: 38.707163, + longitude: -9.135517, + accuracy: 140000.0 + } +}); diff --git a/test/lib/agent/providers/fixtures/location_response.json b/test/lib/agent/providers/fixtures/location_response.json deleted file mode 100644 index 1c4b960d2..000000000 --- a/test/lib/agent/providers/fixtures/location_response.json +++ /dev/null @@ -1 +0,0 @@ -{"location":{"latitude":38.707163,"longitude":-9.135517,"accuracy":140000.0}} diff --git a/test/lib/agent/providers/geo/coordinates.js b/test/lib/agent/providers/geo/google_strategy.js similarity index 71% rename from test/lib/agent/providers/geo/coordinates.js rename to test/lib/agent/providers/geo/google_strategy.js index bfc0756e4..f0cd226b9 100644 --- a/test/lib/agent/providers/geo/coordinates.js +++ b/test/lib/agent/providers/geo/google_strategy.js @@ -1,7 +1,6 @@ var helpers = require('./../../../../helpers'), should = require('should'), - fs = require('fs'), - provider = helpers.load('providers/geo'); + google_strat = helpers.load('providers/geo/strategies').google; describe('location', function(){ @@ -15,8 +14,6 @@ describe('location', function(){ describe('when access points is valid', function(){ - var list = require('./../fixtures/parsed_access_points_list'); - describe('and geolocation endpoint returns error', function(){ it('returns error', function(){ @@ -35,7 +32,7 @@ describe('location', function(){ it('returns error', function(done){ - provider.send_data(list, function(err, data){ + google_strat(function(err, data) { err.should.be.an.instanceof(Error); should.not.exist(data); done(); @@ -47,18 +44,15 @@ describe('location', function(){ describe('and response contains valid coordinates', function(){ - before(function(done){ - fs.readFile(__dirname + '/../fixtures/location_response.json', function(err, data){ - helpers.stub_request('get', null, { statusCode: 200 }, data.toString().trim()); - done(); - }); + before(function(){ + var location_response = require('../fixtures/google_location_response'); + helpers.stub_request('get', null, { statusCode: 200 }, location_response); }); it('callsback coordinates', function(done){ - provider.send_data(list, function(err, data){ - // should.not.exist(err); TODO: fix this - data.should.be.an.instanceof(Object); + google_strat(function(err, data) { + should.not.exist(err); data.should.have.keys(['lat', 'lng', 'accuracy', 'method']); done(); }); @@ -67,7 +61,7 @@ describe('location', function(){ it('sets method to wifi', function (done) { - provider.send_data(list, function (err, data){ + google_strat(function(err, data) { data.method.should.equal('wifi'); done(); }); @@ -82,7 +76,7 @@ describe('location', function(){ this.timeout(3000); // response may take longer - provider.send_data(list, function(err, data){ + google_strat(function(err, data) { if (err) { console.log('\n========================================'); console.log(' Geolocation endpoint seems to be down!'); From 1f307709c30f507977b72a9a2427cb7a1e60ea01 Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Thu, 2 Jul 2015 18:07:55 -0300 Subject: [PATCH 13/25] Fix spec for codeship timeout on remote request. --- test/lib/agent/providers/geo/google_strategy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/lib/agent/providers/geo/google_strategy.js b/test/lib/agent/providers/geo/google_strategy.js index f0cd226b9..af3f14559 100644 --- a/test/lib/agent/providers/geo/google_strategy.js +++ b/test/lib/agent/providers/geo/google_strategy.js @@ -74,7 +74,7 @@ describe('location', function(){ it('works', function(done){ - this.timeout(3000); // response may take longer + this.timeout(6000); // response may take longer google_strat(function(err, data) { if (err) { From 9adf3059b7330f9de6a38e5ec7db5513e6bf18cb Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Fri, 3 Jul 2015 10:47:24 -0300 Subject: [PATCH 14/25] Use fixture for AP list in geoloc spec. --- test/helpers.js | 19 ++++++- .../agent/providers/geo/google_strategy.js | 55 +++++++++++-------- 2 files changed, 51 insertions(+), 23 deletions(-) diff --git a/test/helpers.js b/test/helpers.js index ed911e146..73ef5ed06 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -5,6 +5,7 @@ var needle = require('needle'), lib_path = path.join(root_path, 'lib'), spawn = require('child_process').spawn, Emitter = require('events').EventEmitter, + providers = require(path.join(lib_path, 'agent','providers')); helpers = {}; var prey_bin = path.join(root_path, 'bin', 'prey'); @@ -47,7 +48,7 @@ helpers.fake_spawn_child = function() { } /* - this helpers lets you fake requests using needle: + this helper lets you fake requests using needle: helpers.stub_request(method, err, resp, body); examples: @@ -78,4 +79,20 @@ helpers.stub_request = function(type, err, resp, body){ } +helpers.stub_provider = function(name, err, return_value) { + var cb, + stub = sinon.stub(providers, 'get', function() { + + for (var i = 0, len = arguments.length; i < len; i++) { + if (typeof arguments[i] === 'function') { + cb = arguments[i] + } + } + + cb(err, return_value); + }); + + return stub; +}; + module.exports = helpers; diff --git a/test/lib/agent/providers/geo/google_strategy.js b/test/lib/agent/providers/geo/google_strategy.js index af3f14559..2ff4b6c05 100644 --- a/test/lib/agent/providers/geo/google_strategy.js +++ b/test/lib/agent/providers/geo/google_strategy.js @@ -1,36 +1,48 @@ -var helpers = require('./../../../../helpers'), - should = require('should'), - google_strat = helpers.load('providers/geo/strategies').google; +var helpers = require('./../../../../helpers'), + should = require('should'), + google_strat = helpers.load('providers/geo/strategies').google, + location_response = require('../fixtures/google_location_response'); -describe('location', function(){ +describe('location', function() { - describe('when access points return error', function(){ + describe('when access points return error', function() { }); - describe('when access points list is empty', function(){ + describe('when access points list is empty', function() { }); - describe('when access points is valid', function(){ + describe('when access points is valid', function() { - describe('and geolocation endpoint returns error', function(){ + var provider_stub = {}; - it('returns error', function(){ + before(function() { + var list = require('./../fixtures/parsed_access_points_list'); + provider_stub = helpers.stub_provider('access_points_list', null, list); + }); + + after(function() { + provider_stub.restore(); + }); + + describe('and geolocation endpoint returns error', function() { + + it('returns error', function() { }); }); - describe('and geolocation endpoint returns 200 OK', function(){ + describe('and geolocation endpoint returns 200 OK', function() { - describe('and response is not valid', function(){ + describe('and response is not valid', function() { - before(function(){ + before(function() { helpers.stub_request('get', null, {}, 'Bad response'); }); - it('returns error', function(done){ + it('returns error', function(done) { google_strat(function(err, data) { err.should.be.an.instanceof(Error); @@ -42,16 +54,15 @@ describe('location', function(){ }); - describe('and response contains valid coordinates', function(){ + describe('and response contains valid coordinates', function() { - before(function(){ - var location_response = require('../fixtures/google_location_response'); + before(function() { helpers.stub_request('get', null, { statusCode: 200 }, location_response); }); - it('callsback coordinates', function(done){ + it('callsback coordinates', function(done) { - google_strat(function(err, data) { + google_strat(function(err, data) { should.not.exist(err); data.should.have.keys(['lat', 'lng', 'accuracy', 'method']); done(); @@ -59,7 +70,7 @@ describe('location', function(){ }); - it('sets method to wifi', function (done) { + it('sets method to wifi', function(done) { google_strat(function(err, data) { data.method.should.equal('wifi'); @@ -70,11 +81,11 @@ describe('location', function(){ }); - describe('real endpoint', function(){ + describe('real endpoint', function() { - it('works', function(done){ + it('works', function(done) { - this.timeout(6000); // response may take longer + this.timeout(3000); // response may take longer google_strat(function(err, data) { if (err) { From f19860360762bba87dab18283a9803f3f4754328 Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Fri, 3 Jul 2015 17:04:59 -0300 Subject: [PATCH 15/25] Use semver wrapper to check if os x version >= 10.6 in geo provider. --- lib/agent/helpers.js | 39 ++++++++++++++++++------- lib/agent/providers/geo/darwin/index.js | 6 ++-- test/lib/agent/helpers.js | 35 ++++++++++++++++++++++ 3 files changed, 67 insertions(+), 13 deletions(-) diff --git a/lib/agent/helpers.js b/lib/agent/helpers.js index 6507c05e4..44133772a 100644 --- a/lib/agent/helpers.js +++ b/lib/agent/helpers.js @@ -21,24 +21,41 @@ helpers.run_via_service = function(){ // is_greater_than("1.3.10", "1.3.9") returns true helpers.is_greater_than = function(first, second) { - var invalid = []; + return semver_wrapper('gt', first, second); +}; - [first, second].forEach(function (el, i) { +helpers.is_greater_or_equal = function(first, second) { + return semver_wrapper('gte', first, second); +}; - if(!semver.valid(el)) { +function semver_wrapper(method_name, first, second) { + var valid = validate_versions([first, second], method_name); - var label = i === 0 ? "first" : "second"; - invalid.push(label); - } + return valid && semver[method_name](first, second); +} + +function validate_versions(versions, method_name) { + var invalid_versions = []; + versions.forEach(function(el) { + if(!semver.valid(el)) { + invalid_versions.push(el); + } }); - if (invalid.length > 0) { - first = second = "0.0.1"; - exceptions.send(new Error("Cannot run is_greater_than. Invalid versions: "+ invalid + ". Values: " + first + ", " + second)); + if(invalid_versions.length > 0) { + handle_version_error(method_name, invalid_versions); + return false; } + return true; +} - return semver.gt(first, second); -}; +function handle_version_error(method_name, versions) { + var err_msg = "Cannot run" + method_name + ". Invalid versions: "; + + err_msg = err_msg.concat(versions.join(" ")); + + exceptions.send(new Error(err_msg)); +} module.exports = helpers; diff --git a/lib/agent/providers/geo/darwin/index.js b/lib/agent/providers/geo/darwin/index.js index 2bd9ba384..3b4805e8e 100644 --- a/lib/agent/providers/geo/darwin/index.js +++ b/lib/agent/providers/geo/darwin/index.js @@ -1,6 +1,8 @@ var join = require('path').join, exec = require('child_process').exec, - system = require('../../../common').system; + common = require('../../../common'), + system = common.system, + gte = common.helpers.is_greater_or_equal; // whereami bin from https://github.com/robmathers/WhereAmI var bin = join(__dirname, 'bin', 'whereami'); @@ -36,7 +38,7 @@ var get_using_corelocation = function(cb) { exports.get_location = function(cb) { system.get_os_version(function(err, version) { - if (version && parseFloat(version) >= 10.6) + if (version && gte(version, "10.6.0")) return get_using_corelocation(cb); cb(new Error('CoreLocation not suppored in OSX ' + version)) diff --git a/test/lib/agent/helpers.js b/test/lib/agent/helpers.js index acb872087..fe0cc5f50 100644 --- a/test/lib/agent/helpers.js +++ b/test/lib/agent/helpers.js @@ -35,4 +35,39 @@ describe('helpers.is_greater_than', function() { helpers.is_greater_than(undefined, null).should.equal(false); }); +}); + +describe('helpers.is_greater_or_equal', function() { + it('returns false when first is lower than second', function () { + helpers.is_greater_or_equal("1.3.9", "1.3.10").should.equal(false); + }); + + it('returns true when first is higher than second', function() { + helpers.is_greater_or_equal("1.3.10", "1.3.9").should.equal(true); + }); + + it('returns true when both are equal', function() { + helpers.is_greater_or_equal("1.3.10", "1.3.10").should.equal(true); + }); + + // In the following cases, there's no way to compare, hence it returns false + + it('returns false when second is empty, null or undefined', function() { + helpers.is_greater_or_equal("1.3.10", "").should.equal(false); + helpers.is_greater_or_equal("1.3.10", null).should.equal(false); + helpers.is_greater_or_equal("1.3.10", undefined).should.equal(false); + }); + + it('returns false when first is empty, null or undefined', function() { + helpers.is_greater_or_equal("", "1.3.10").should.equal(false); + helpers.is_greater_or_equal(null, "1.3.10").should.equal(false); + helpers.is_greater_or_equal(undefined, "1.3.10").should.equal(false); + }); + + it('returns false if both are empty, null or undefined', function() { + helpers.is_greater_or_equal("", "").should.equal(false); + helpers.is_greater_or_equal(null, undefined).should.equal(false); + helpers.is_greater_or_equal(undefined, null).should.equal(false); + }); + }); \ No newline at end of file From c18ba91124aaf1e991462ed49ed5a64c78a09be5 Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Thu, 9 Jul 2015 14:07:18 -0300 Subject: [PATCH 16/25] Update windows.devices.geolocation library --- .../windows.devices.geolocation/.npmignore | 14 +- .../windows.devices.geolocation/README.md | 42 +- .../NodeRT_Windows_Devices_Geolocation.node | Bin 0 -> 183296 bytes .../NodeRT_Windows_Devices_Geolocation.node | Bin 0 -> 212992 bytes .../build/Release/binding.node | Bin 168960 -> 0 bytes .../NodeRT_Windows_Devices_Geolocation.d.js | 492 +++++++++--------- .../NodeRT_Windows_Devices_Geolocation.d.ts | 324 ++++++------ .../windows.devices.geolocation/lib/main.js | 75 +-- .../windows.devices.geolocation/package.json | 106 ++-- 9 files changed, 475 insertions(+), 578 deletions(-) mode change 100644 => 100755 lib/agent/providers/geo/win32/windows.devices.geolocation/.npmignore mode change 100644 => 100755 lib/agent/providers/geo/win32/windows.devices.geolocation/README.md create mode 100755 lib/agent/providers/geo/win32/windows.devices.geolocation/bin/ia32/NodeRT_Windows_Devices_Geolocation.node create mode 100755 lib/agent/providers/geo/win32/windows.devices.geolocation/bin/x64/NodeRT_Windows_Devices_Geolocation.node delete mode 100644 lib/agent/providers/geo/win32/windows.devices.geolocation/build/Release/binding.node mode change 100644 => 100755 lib/agent/providers/geo/win32/windows.devices.geolocation/lib/NodeRT_Windows_Devices_Geolocation.d.js mode change 100644 => 100755 lib/agent/providers/geo/win32/windows.devices.geolocation/lib/NodeRT_Windows_Devices_Geolocation.d.ts mode change 100644 => 100755 lib/agent/providers/geo/win32/windows.devices.geolocation/lib/main.js mode change 100644 => 100755 lib/agent/providers/geo/win32/windows.devices.geolocation/package.json diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/.npmignore b/lib/agent/providers/geo/win32/windows.devices.geolocation/.npmignore old mode 100644 new mode 100755 index f5c9ab246..ab6712188 --- a/lib/agent/providers/geo/win32/windows.devices.geolocation/.npmignore +++ b/lib/agent/providers/geo/win32/windows.devices.geolocation/.npmignore @@ -1,6 +1,10 @@ -*.vcxproj -*.filters -*.user -Debug -Release +binding.gyp +*.cc +*.cpp +*.h +*.vcxproj +*.filters +*.user +Debug +Release test \ No newline at end of file diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/README.md b/lib/agent/providers/geo/win32/windows.devices.geolocation/README.md old mode 100644 new mode 100755 index 738582c3f..02158d521 --- a/lib/agent/providers/geo/win32/windows.devices.geolocation/README.md +++ b/lib/agent/providers/geo/win32/windows.devices.geolocation/README.md @@ -1,35 +1,7 @@ -windows.devices.geolocation -===== - -A Node.js wrapper for the Windows.Devices.Geolocation WinRT namespace, compatible with Windows 8.1. - -Using this module, you'll be able to consume the Windows.Devices.Geolocation API directly from Node.js. - -This module was automatically generated by NodeRT. -For more information on NodeRT and examples on how to use NodeRT modules, please visit the project page at: https://github.com/NodeRT/NodeRT. - -The API exposed by this module is (almost) the same as the API that is listed in: http://msdn.microsoft.com/en-us/library/windows/apps/Windows.Devices.Geolocation.aspx - -The only difference in the API is in the way that asynchronous methods and events are used. (See https://github.com/NodeRT/NodeRT#ConsumingNodeRT for more details) - -This module also contains TypeScript definition files for the API exposed by the module, as well as JavaScript intellisense support for Node.js tools for Visual Studio. - -Prequisites: -============ -* Visual Studio 2013, or VS 2013 Express for Windows Desktop. -* node-gyp. (Make sure to also have python installed). - -Installation: -============= -In order to install this module, run npm install: - -``` -npm install windows.devices.geolocation -``` - -If you wish to rebuild this module using node-gyp, make sure to use the --msvs_version=2013 flag: - -``` -cd [module folder path] -node-gyp rebuild --msvs_version=2013 -``` \ No newline at end of file +Windows.Devices.Geolocation +===== +This addon wraps Windows.Devices.Geolocation WinRT namespace. + +Please see below the documantation from http://msdn.microsoft.com/en-us/library/windows/apps/Windows.Devices.Geolocation.aspx + diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/bin/ia32/NodeRT_Windows_Devices_Geolocation.node b/lib/agent/providers/geo/win32/windows.devices.geolocation/bin/ia32/NodeRT_Windows_Devices_Geolocation.node new file mode 100755 index 0000000000000000000000000000000000000000..419e0f0249fa3f0a97761d40415eff920cbf19f5 GIT binary patch literal 183296 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 literal 0 HcmV?d00001 diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/bin/x64/NodeRT_Windows_Devices_Geolocation.node b/lib/agent/providers/geo/win32/windows.devices.geolocation/bin/x64/NodeRT_Windows_Devices_Geolocation.node new file mode 100755 index 0000000000000000000000000000000000000000..877f9f9dd73b545a581fb6c2f4c5f961b596a5d8 GIT binary patch literal 212992 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

QD+g>r$R? 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 Y-grc(jUuBFIk - ///

Function summary. - /// - } - -cls.prototype.getGeopositionAsync = function getGeopositionAsync(maximumAge, timeout, callback) { - /// - /// Function summary. - /// A param. - /// A param. - /// - } - - - cls.prototype.addListener = function addListener(eventName, callback){} - cls.prototype.removeListener = function removeListener(eventName, callback){} - cls.prototype.on = function on(eventName, callback){} - cls.prototype.off = function off(eventName, callback){} - return cls; -}) (); -exports.Geolocator = Geolocator; - -Geocircle = (function () { - var cls = function Geocircle() { - this.center = new BasicGeoposition(); - this.radius = new Number(); - this.altitudeReferenceSystem = new AltitudeReferenceSystem(); - this.geoshapeType = new GeoshapeType(); - this.spatialReferenceId = new Number(); - }; - -var cls = function Geocircle(position, radius) { - this.center = new BasicGeoposition(); - this.radius = new Number(); - this.altitudeReferenceSystem = new AltitudeReferenceSystem(); - this.geoshapeType = new GeoshapeType(); - this.spatialReferenceId = new Number(); -}; - -var cls = function Geocircle(position, radius, altitudeReferenceSystem) { - this.center = new BasicGeoposition(); - this.radius = new Number(); - this.altitudeReferenceSystem = new AltitudeReferenceSystem(); - this.geoshapeType = new GeoshapeType(); - this.spatialReferenceId = new Number(); -}; - -var cls = function Geocircle(position, radius, altitudeReferenceSystem, spatialReferenceId) { - this.center = new BasicGeoposition(); - this.radius = new Number(); - this.altitudeReferenceSystem = new AltitudeReferenceSystem(); - this.geoshapeType = new GeoshapeType(); - this.spatialReferenceId = new Number(); -}; - - - return cls; -}) (); -exports.Geocircle = Geocircle; - + +BasicGeoposition = (function () { + var cls = function BasicGeoposition() { + this.latitude = new Number(); + this.longitude = new Number(); + this.altitude = new Number(); + }; + return cls; +}) (); +exports.BasicGeoposition = BasicGeoposition; + + +_PositionAccuracy = function () { + this.default = 0; + this.high = 1; +} +exports.PositionAccuracy = new _PositionAccuracy(); + +_PositionStatus = function () { + this.ready = 0; + this.initializing = 1; + this.noData = 2; + this.disabled = 3; + this.notInitialized = 4; + this.notAvailable = 5; +} +exports.PositionStatus = new _PositionStatus(); + +_PositionSource = function () { + this.cellular = 0; + this.satellite = 1; + this.wiFi = 2; + this.iPAddress = 3; + this.unknown = 4; +} +exports.PositionSource = new _PositionSource(); + +_GeoshapeType = function () { + this.geopoint = 0; + this.geocircle = 1; +} +exports.GeoshapeType = new _GeoshapeType(); + +_AltitudeReferenceSystem = function () { + this.unspecified = 0; + this.terrain = 1; + this.ellipsoid = 2; + this.geoid = 3; + this.surface = 4; +} +exports.AltitudeReferenceSystem = new _AltitudeReferenceSystem(); + +IGeoshape = (function () { + var cls = function IGeoshape() { + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); + }; + + + return cls; +}) (); +exports.IGeoshape = IGeoshape; + +Geopoint = (function () { + var cls = function Geopoint() { + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); + this.position = new BasicGeoposition(); + }; + +var cls = function Geopoint(position) { + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); + this.position = new BasicGeoposition(); +}; + +var cls = function Geopoint(position, altitudeReferenceSystem) { + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); + this.position = new BasicGeoposition(); +}; + +var cls = function Geopoint(position, altitudeReferenceSystem, spatialReferenceId) { + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); + this.position = new BasicGeoposition(); +}; + + + return cls; +}) (); +exports.Geopoint = Geopoint; + +GeocoordinateSatelliteData = (function () { + var cls = function GeocoordinateSatelliteData() { + this.horizontalDilutionOfPrecision = new Number(); + this.positionDilutionOfPrecision = new Number(); + this.verticalDilutionOfPrecision = new Number(); + }; + + + return cls; +}) (); +exports.GeocoordinateSatelliteData = GeocoordinateSatelliteData; + +Geocoordinate = (function () { + var cls = function Geocoordinate() { + this.positionSource = new PositionSource(); + this.satelliteData = new GeocoordinateSatelliteData(); + this.accuracy = new Number(); + this.altitude = new Number(); + this.altitudeAccuracy = new Number(); + this.heading = new Number(); + this.latitude = new Number(); + this.longitude = new Number(); + this.speed = new Number(); + this.timestamp = new Date(); + this.point = new Geopoint(); + }; + + + return cls; +}) (); +exports.Geocoordinate = Geocoordinate; + +CivicAddress = (function () { + var cls = function CivicAddress() { + this.city = new String(); + this.country = new String(); + this.postalCode = new String(); + this.state = new String(); + this.timestamp = new Date(); + }; + + + return cls; +}) (); +exports.CivicAddress = CivicAddress; + +Geoposition = (function () { + var cls = function Geoposition() { + this.civicAddress = new CivicAddress(); + this.coordinate = new Geocoordinate(); + }; + + + return cls; +}) (); +exports.Geoposition = Geoposition; + +PositionChangedEventArgs = (function () { + var cls = function PositionChangedEventArgs() { + this.position = new Geoposition(); + }; + + + return cls; +}) (); +exports.PositionChangedEventArgs = PositionChangedEventArgs; + +StatusChangedEventArgs = (function () { + var cls = function StatusChangedEventArgs() { + this.status = new PositionStatus(); + }; + + + return cls; +}) (); +exports.StatusChangedEventArgs = StatusChangedEventArgs; + +Geolocator = (function () { + var cls = function Geolocator() { + this.desiredAccuracyInMeters = new Number(); + this.reportInterval = new Number(); + this.movementThreshold = new Number(); + this.desiredAccuracy = new PositionAccuracy(); + this.locationStatus = new PositionStatus(); + }; + + + cls.prototype.getGeopositionAsync = function getGeopositionAsync(callback) { + /// + /// Function summary. + /// + } + +cls.prototype.getGeopositionAsync = function getGeopositionAsync(maximumAge, timeout, callback) { + /// + /// Function summary. + /// A param. + /// A param. + /// + } + + + cls.prototype.addListener = function addListener(eventName, callback){} + cls.prototype.removeListener = function removeListener(eventName, callback){} + cls.prototype.on = function on(eventName, callback){} + cls.prototype.off = function off(eventName, callback){} + return cls; +}) (); +exports.Geolocator = Geolocator; + +Geocircle = (function () { + var cls = function Geocircle() { + this.center = new BasicGeoposition(); + this.radius = new Number(); + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); + }; + +var cls = function Geocircle(position, radius) { + this.center = new BasicGeoposition(); + this.radius = new Number(); + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); +}; + +var cls = function Geocircle(position, radius, altitudeReferenceSystem) { + this.center = new BasicGeoposition(); + this.radius = new Number(); + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); +}; + +var cls = function Geocircle(position, radius, altitudeReferenceSystem, spatialReferenceId) { + this.center = new BasicGeoposition(); + this.radius = new Number(); + this.altitudeReferenceSystem = new AltitudeReferenceSystem(); + this.geoshapeType = new GeoshapeType(); + this.spatialReferenceId = new Number(); +}; + + + return cls; +}) (); +exports.Geocircle = Geocircle; + diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/NodeRT_Windows_Devices_Geolocation.d.ts b/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/NodeRT_Windows_Devices_Geolocation.d.ts old mode 100644 new mode 100755 index 15561796d..0fa8e8c6e --- a/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/NodeRT_Windows_Devices_Geolocation.d.ts +++ b/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/NodeRT_Windows_Devices_Geolocation.d.ts @@ -1,162 +1,162 @@ -declare module "windows.devices.geolocation" { - export class BasicGeoposition { - latitude: Number; - longitude: Number; - altitude: Number; - constructor(); - } - - export enum PositionAccuracy { - default, - high, - } - - export enum PositionStatus { - ready, - initializing, - noData, - disabled, - notInitialized, - notAvailable, - } - - export enum PositionSource { - cellular, - satellite, - wiFi, - iPAddress, - unknown, - } - - export enum GeoshapeType { - geopoint, - geocircle, - } - - export enum AltitudeReferenceSystem { - unspecified, - terrain, - ellipsoid, - geoid, - surface, - } - - export class IGeoshape { - altitudeReferenceSystem: AltitudeReferenceSystem; - geoshapeType: GeoshapeType; - spatialReferenceId: Number; - constructor(); - - } - - export class Geopoint { - position: BasicGeoposition; - altitudeReferenceSystem: AltitudeReferenceSystem; - geoshapeType: GeoshapeType; - spatialReferenceId: Number; - constructor(); - constructor(position: BasicGeoposition); - constructor(position: BasicGeoposition, altitudeReferenceSystem: AltitudeReferenceSystem); - constructor(position: BasicGeoposition, altitudeReferenceSystem: AltitudeReferenceSystem, spatialReferenceId: Number); - - } - - export class GeocoordinateSatelliteData { - horizontalDilutionOfPrecision: Number; - positionDilutionOfPrecision: Number; - verticalDilutionOfPrecision: Number; - constructor(); - - } - - export class Geocoordinate { - accuracy: Number; - altitude: Number; - altitudeAccuracy: Number; - heading: Number; - latitude: Number; - longitude: Number; - speed: Number; - timestamp: Date; - positionSource: PositionSource; - satelliteData: GeocoordinateSatelliteData; - point: Geopoint; - constructor(); - - } - - export class CivicAddress { - city: String; - country: String; - postalCode: String; - state: String; - timestamp: Date; - constructor(); - - } - - export class Geoposition { - civicAddress: CivicAddress; - coordinate: Geocoordinate; - constructor(); - - } - - export class PositionChangedEventArgs { - position: Geoposition; - constructor(); - - } - - export class StatusChangedEventArgs { - status: PositionStatus; - constructor(); - - } - - export class Geolocator { - reportInterval: Number; - movementThreshold: Number; - desiredAccuracy: PositionAccuracy; - locationStatus: PositionStatus; - desiredAccuracyInMeters: Number; - constructor(); - - getGeopositionAsync(callback: (error: Error, result: Geoposition) => void): void ; - getGeopositionAsync(maximumAge: Number, timeout: Number, callback: (error: Error, result: Geoposition) => void): void ; - - addListener(type: "PositionChanged", listener: (ev: Event) => void): void ; - removeListener(type: "PositionChanged", listener: (ev: Event) => void): void ; - on(type: "PositionChanged", listener: (ev: Event) => void): void ; - off(type: "PositionChanged", listener: (ev: Event) => void): void ; - - addListener(type: "StatusChanged", listener: (ev: Event) => void): void ; - removeListener(type: "StatusChanged", listener: (ev: Event) => void): void ; - on(type: "StatusChanged", listener: (ev: Event) => void): void ; - off(type: "StatusChanged", listener: (ev: Event) => void): void ; - - addListener(type: string, listener: (ev: Event) => void): void ; - removeListener(type: string, listener: (ev: Event) => void): void ; - on(type: string, listener: (ev: Event) => void): void ; - off(type: string, listener: (ev: Event) => void): void ; - - - } - - export class Geocircle { - center: BasicGeoposition; - radius: Number; - altitudeReferenceSystem: AltitudeReferenceSystem; - geoshapeType: GeoshapeType; - spatialReferenceId: Number; - constructor(); - constructor(position: BasicGeoposition, radius: Number); - constructor(position: BasicGeoposition, radius: Number, altitudeReferenceSystem: AltitudeReferenceSystem); - constructor(position: BasicGeoposition, radius: Number, altitudeReferenceSystem: AltitudeReferenceSystem, spatialReferenceId: Number); - - } - -} - - - +declare module "windows.devices.geolocation" { + export class BasicGeoposition { + latitude: Number; + longitude: Number; + altitude: Number; + constructor(); + } + + export enum PositionAccuracy { + default, + high, + } + + export enum PositionStatus { + ready, + initializing, + noData, + disabled, + notInitialized, + notAvailable, + } + + export enum PositionSource { + cellular, + satellite, + wiFi, + iPAddress, + unknown, + } + + export enum GeoshapeType { + geopoint, + geocircle, + } + + export enum AltitudeReferenceSystem { + unspecified, + terrain, + ellipsoid, + geoid, + surface, + } + + export class IGeoshape { + altitudeReferenceSystem: AltitudeReferenceSystem; + geoshapeType: GeoshapeType; + spatialReferenceId: Number; + constructor(); + + } + + export class Geopoint { + altitudeReferenceSystem: AltitudeReferenceSystem; + geoshapeType: GeoshapeType; + spatialReferenceId: Number; + position: BasicGeoposition; + constructor(); + constructor(position: BasicGeoposition); + constructor(position: BasicGeoposition, altitudeReferenceSystem: AltitudeReferenceSystem); + constructor(position: BasicGeoposition, altitudeReferenceSystem: AltitudeReferenceSystem, spatialReferenceId: Number); + + } + + export class GeocoordinateSatelliteData { + horizontalDilutionOfPrecision: Number; + positionDilutionOfPrecision: Number; + verticalDilutionOfPrecision: Number; + constructor(); + + } + + export class Geocoordinate { + positionSource: PositionSource; + satelliteData: GeocoordinateSatelliteData; + accuracy: Number; + altitude: Number; + altitudeAccuracy: Number; + heading: Number; + latitude: Number; + longitude: Number; + speed: Number; + timestamp: Date; + point: Geopoint; + constructor(); + + } + + export class CivicAddress { + city: String; + country: String; + postalCode: String; + state: String; + timestamp: Date; + constructor(); + + } + + export class Geoposition { + civicAddress: CivicAddress; + coordinate: Geocoordinate; + constructor(); + + } + + export class PositionChangedEventArgs { + position: Geoposition; + constructor(); + + } + + export class StatusChangedEventArgs { + status: PositionStatus; + constructor(); + + } + + export class Geolocator { + desiredAccuracyInMeters: Number; + reportInterval: Number; + movementThreshold: Number; + desiredAccuracy: PositionAccuracy; + locationStatus: PositionStatus; + constructor(); + + getGeopositionAsync(callback: (error: Error, result: Geoposition) => void): void ; + getGeopositionAsync(maximumAge: Number, timeout: Number, callback: (error: Error, result: Geoposition) => void): void ; + + addListener(type: "PositionChanged", listener: (ev: Event) => void): void ; + removeListener(type: "PositionChanged", listener: (ev: Event) => void): void ; + on(type: "PositionChanged", listener: (ev: Event) => void): void ; + off(type: "PositionChanged", listener: (ev: Event) => void): void ; + + addListener(type: "StatusChanged", listener: (ev: Event) => void): void ; + removeListener(type: "StatusChanged", listener: (ev: Event) => void): void ; + on(type: "StatusChanged", listener: (ev: Event) => void): void ; + off(type: "StatusChanged", listener: (ev: Event) => void): void ; + + addListener(type: string, listener: (ev: Event) => void): void ; + removeListener(type: string, listener: (ev: Event) => void): void ; + on(type: string, listener: (ev: Event) => void): void ; + off(type: string, listener: (ev: Event) => void): void ; + + + } + + export class Geocircle { + center: BasicGeoposition; + radius: Number; + altitudeReferenceSystem: AltitudeReferenceSystem; + geoshapeType: GeoshapeType; + spatialReferenceId: Number; + constructor(); + constructor(position: BasicGeoposition, radius: Number); + constructor(position: BasicGeoposition, radius: Number, altitudeReferenceSystem: AltitudeReferenceSystem); + constructor(position: BasicGeoposition, radius: Number, altitudeReferenceSystem: AltitudeReferenceSystem, spatialReferenceId: Number); + + } + +} + + + diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/main.js b/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/main.js old mode 100644 new mode 100755 index f7aa75eff..7591747ae --- a/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/main.js +++ b/lib/agent/providers/geo/win32/windows.devices.geolocation/lib/main.js @@ -1,54 +1,21 @@ -// Copyright (c) Microsoft Corporation -// All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the ""License""); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -// -// THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. -// -// See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -var path = require('path'); -var fs = require('fs'); - -try { - // this little trick makes node.js Tools for VS load intellisense for the module - if (fs.existsSync(path.join(__dirname, 'NodeRT_Windows_Devices_Geolocation.d.js)'))) { - module.exports = require('./NodeRT_Windows_Devices_Geolocation.d.js'); - } - module.exports = require('../build/release/binding.node'); -} -catch(e) { - throw e; -} - -var externalReferencedNamespaces = []; - - -if (externalReferencedNamespaces.length > 0) { - var namespaceRegistry = global.__winRtNamespaces__; - - if (!namespaceRegistry) { - namespaceRegistry = {}; - Object.defineProperty(global, '__winRtNamespaces__', { - configurable: true, - writable: false, - enumerable: false, - value: namespaceRegistry - }); - } - - function requireNamespace(namespace) { - var m = require(namespace.toLowerCase()); - delete namespaceRegistry[namespace]; - namespaceRegistry[namespace] = m; - return m; - } - - for (var i in externalReferencedNamespaces) { - var ns = externalReferencedNamespaces[i]; - Object.defineProperty(namespaceRegistry, ns, { - configurable: true, - enumerable: true, - get: requireNamespace.bind(null, ns) - }); - } -} \ No newline at end of file +// Copyright (c) Microsoft Corporation +// All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the ""License""); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 +// +// THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. +// +// See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. +var path = require('path'); +var fs = require('fs'); + +try { + // this little trick makes node.js Tools for VS load intellisense for the modul + if (fs.existsSync(path.join(__dirname, 'NodeRT_Windows_Devices_Geolocation.d.js)'))) { + module.exports = require('./NodeRT_Windows_Devices_Geolocation.d.js'); + } + module.exports = require('../bin/' + process.arch + '/NodeRT_Windows_Devices_Geolocation.node'); +} +catch(e) { + throw e; +} diff --git a/lib/agent/providers/geo/win32/windows.devices.geolocation/package.json b/lib/agent/providers/geo/win32/windows.devices.geolocation/package.json old mode 100644 new mode 100755 index fb8d8ecaa..ecbcbc5d8 --- a/lib/agent/providers/geo/win32/windows.devices.geolocation/package.json +++ b/lib/agent/providers/geo/win32/windows.devices.geolocation/package.json @@ -1,76 +1,30 @@ -{ - "name": "windows.devices.geolocation", - "version": "0.1.6", - "description": "Use the Windows.Devices.Geolocation WinRT API directly from Node.js", - "main": "lib/main.js", - "scripts": { - "install": "node-gyp rebuild --msvs_version=2013" - }, - "keywords": [ - "Windows.Devices.Geolocation", - "Windows", - "Devices", - "Geolocation", - "IGeoshape", - "Geopoint", - "GeocoordinateSatelliteData", - "Geocoordinate", - "CivicAddress", - "Geoposition", - "PositionChangedEventArgs", - "StatusChangedEventArgs", - "Geolocator", - "Geocircle", - "PositionAccuracy", - "PositionStatus", - "PositionSource", - "GeoshapeType", - "AltitudeReferenceSystem", - "BasicGeoposition", - "NodeRT", - "WinRT", - "Microsoft" - ], - "optionalDependencies": {}, - "repository": { - "type": "git", - "url": "git://github.com/NodeRT/NodeRT.git" - }, - "homepage": "https://github.com/NodeRT/NodeRT", - "author": { - "name": "Generated by NodeRT" - }, - "contributors": [ - { - "name": "nadavbar", - "email": "nadavbar@gmail.com", - "url": "http://www.nadavos.com" - } - ], - "gypfile": true, - "license": "Apache 2.0", - "bugs": { - "url": "https://github.com/NodeRT/NodeRT/issues" - }, - "dependencies": {}, - "_id": "windows.devices.geolocation@0.1.6", - "_shasum": "5748f1a8174a6a88423c43030a7df4612cc485d8", - "_from": "windows.devices.geolocation@", - "_npmVersion": "1.4.23", - "_npmUser": { - "name": "nadavbar", - "email": "nadavbar@gmail.com" - }, - "maintainers": [ - { - "name": "nadavbar", - "email": "nadavbar@gmail.com" - } - ], - "dist": { - "shasum": "5748f1a8174a6a88423c43030a7df4612cc485d8", - "tarball": "http://registry.npmjs.org/windows.devices.geolocation/-/windows.devices.geolocation-0.1.6.tgz" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/windows.devices.geolocation/-/windows.devices.geolocation-0.1.6.tgz" -} +{ + "name": "windows.devices.geolocation", + "version": "0.1.0", + "description": "NodeRT Wrapper for Windows.Devices.Geolocation", + "main": "lib/main.js", + "keywords": [ + "Windows.Devices.Geolocation", + "Windows", + "Devices", + "Geolocation", + "IGeoshape", + "Geopoint", + "GeocoordinateSatelliteData", + "Geocoordinate", + "CivicAddress", + "Geoposition", + "PositionChangedEventArgs", + "StatusChangedEventArgs", + "Geolocator", + "Geocircle", + "PositionAccuracy", + "PositionStatus", + "PositionSource", + "GeoshapeType", + "AltitudeReferenceSystem", + "BasicGeoposition" + ], + "author": "Generated by NodeRT", + "license": "Apache 2.0" +} From 25b745927d54231717693512e756f2fb8b8a7ed8 Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Fri, 10 Jul 2015 15:37:01 -0300 Subject: [PATCH 17/25] Add specs for geoip --- lib/agent/providers/geo/strategies.js | 5 +- .../lib/agent/providers/geo/geoip_strategy.js | 118 ++++++++++++++++++ 2 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 test/lib/agent/providers/geo/geoip_strategy.js diff --git a/lib/agent/providers/geo/strategies.js b/lib/agent/providers/geo/strategies.js index d790eaf44..65ae5b80d 100644 --- a/lib/agent/providers/geo/strategies.js +++ b/lib/agent/providers/geo/strategies.js @@ -12,7 +12,7 @@ function geoip(cb) { logger.debug("Getting location via geoip"); needle.get('http://ipinfo.io/geo', function(err, resp, body) { - if (!body || body.log) { + if (!body || !body.loc) { return cb(err || new Error('Unable to get location from IP.')); } @@ -20,7 +20,8 @@ function geoip(cb) { var res = { lat: parseFloat(body.loc.split(',')[0]), - lng: parseFloat(body.loc.split(',')[1]) + lng: parseFloat(body.loc.split(',')[1]), + method: 'geoip' } cb(null, res); diff --git a/test/lib/agent/providers/geo/geoip_strategy.js b/test/lib/agent/providers/geo/geoip_strategy.js new file mode 100644 index 000000000..60817b475 --- /dev/null +++ b/test/lib/agent/providers/geo/geoip_strategy.js @@ -0,0 +1,118 @@ +var helpers = require('./../../../../helpers'), + should = require('should'), + geoip_strat = helpers.load('providers/geo/strategies').geoip; + +describe('mocked location', function () { + + stub_request = function(body) { + helpers.stub_request('get', null, { statusCode: 200 }, body); + } + + describe('when response', function () { + + var body = {}; + + describe('has no body', function () { + before(function() { + stub_request(body); + }); + + it('returns error', function(done) { + + geoip_strat(function(err, res) { + should(res).be.nil; + should(err).be.instanceof.Error; + err.message.should.be.exactly('Unable to get location from IP.'); + done(); + }); + + }); + + }); + + describe('has body but no loc', function () { + before(function () { + body = { + "ip": "8.8.8.8", + "hostname": "google-public-dns-a.google.com", + "org": "AS15169 Google Inc.", + "city": "Mountain View", + "region": "California", + "country": "US", + "phone": 650 + }; + + stub_request(body); + }); + + it('returns error', function(done) { + + geoip_strat(function(err, res) { + should(res).be.nil; + should(err).be.instanceof.Error; + err.message.should.be.exactly('Unable to get location from IP.'); + done(); + }); + + }); + + }); + + describe('has body with loc', function () { + + beforeEach(function () { + + body = { + "ip": "8.8.8.8", + "hostname": "google-public-dns-a.google.com", + "loc": "37.385999999999996,-122.0838", + "org": "AS15169 Google Inc.", + "city": "Mountain View", + "region": "California", + "country": "US", + "phone": 650 + }; + + stub_request(body); + }); + + it('returns location', function(done) { + + geoip_strat(function(err, res) { + should(err).be.nil; + res.lat.should.equal(37.385999999999996); + res.lng.should.equal(-122.0838); + done(); + }); + + }); + + it('returns method equals to geoip', function(done) { + + geoip_strat(function(err, res) { + should(err).be.nil; + res.method.should.equal('geoip'); + done(); + }); + + }); + }); + + }); + +}); + +describe('real end-point', function() { + + it('returns location', function(done) { + geoip_strat(function(err, res) { + should(err).be.nil; + should.exist(res.lat); + should.exist(res.lng); + should.exist(res.method); + res.method.should.equal('geoip'); + done(); + }); + }); + +}); From b679524161a05704912a48f7f9bb17c0e934e411 Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Fri, 10 Jul 2015 15:40:18 -0300 Subject: [PATCH 18/25] Fix google ip geoloc spec to use stub in all request but the last one. --- test/lib/agent/providers/geo/google_strategy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/lib/agent/providers/geo/google_strategy.js b/test/lib/agent/providers/geo/google_strategy.js index 2ff4b6c05..b1c7e58d0 100644 --- a/test/lib/agent/providers/geo/google_strategy.js +++ b/test/lib/agent/providers/geo/google_strategy.js @@ -56,7 +56,7 @@ describe('location', function() { describe('and response contains valid coordinates', function() { - before(function() { + beforeEach(function() { helpers.stub_request('get', null, { statusCode: 200 }, location_response); }); From 8d0c8cc572b7a14f3366f4d435f97f4ebd41b73e Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Mon, 13 Jul 2015 18:13:28 -0300 Subject: [PATCH 19/25] WIP: Geonative strategy specs. --- lib/agent/providers/geo/linux/index.js | 2 - lib/agent/providers/geo/strategies.js | 3 + test/helpers.js | 57 ++++--- .../lib/agent/providers/geo/geoip_strategy.js | 156 +++++++++--------- .../agent/providers/geo/geonative_strategy.js | 111 +++++++++++++ 5 files changed, 225 insertions(+), 104 deletions(-) create mode 100644 test/lib/agent/providers/geo/geonative_strategy.js diff --git a/lib/agent/providers/geo/linux/index.js b/lib/agent/providers/geo/linux/index.js index 60ca724ba..92990b787 100644 --- a/lib/agent/providers/geo/linux/index.js +++ b/lib/agent/providers/geo/linux/index.js @@ -44,7 +44,6 @@ function get_command_one(provider) { function geoclue_one(provider, cb) { - // console.log('Trying with provider: ' + provider); var cmd = get_command_one(provider); exec(cmd, function(err, out) { @@ -78,7 +77,6 @@ exports.get_location = function(cb) { geoclue_one('Skyhook', function(err, res) { if (res) return cb(null, res); - // cb(err || new Error('Unable to get location.')); geoclue_one('UbuntuGeoIP', cb); }); }) diff --git a/lib/agent/providers/geo/strategies.js b/lib/agent/providers/geo/strategies.js index 65ae5b80d..cc64d1ca5 100644 --- a/lib/agent/providers/geo/strategies.js +++ b/lib/agent/providers/geo/strategies.js @@ -107,6 +107,9 @@ function geonative(cb) { logger.debug("Got location via native geoloc"); + // Avoid adding property in each native geoloc implementation + res.method = 'geonative'; + return cb(null, res); }); } diff --git a/test/helpers.js b/test/helpers.js index 73ef5ed06..9187369d9 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -1,12 +1,12 @@ -var needle = require('needle'), - sinon = require('sinon'), - path = require('path'), +var needle = require('needle'), + sinon = require('sinon'), + path = require('path'), root_path = path.resolve(__dirname, '..'), - lib_path = path.join(root_path, 'lib'), - spawn = require('child_process').spawn, + lib_path = path.join(root_path, 'lib'), + spawn = require('child_process').spawn, Emitter = require('events').EventEmitter, - providers = require(path.join(lib_path, 'agent','providers')); - helpers = {}; + providers = require(path.join(lib_path, 'agent','providers')), + helpers = {}; var prey_bin = path.join(root_path, 'bin', 'prey'); @@ -61,19 +61,16 @@ helpers.fake_spawn_child = function() { */ +// TODO @lemavri DRY stub creation + helpers.stub_request = function(type, err, resp, body){ var cb, stub = sinon.stub(needle, type, function() { - - for (var i = 0; i < arguments.length; i++) { - if (typeof arguments[i] == 'function') - cb = arguments[i]; - } - - cb(err, resp, body); - stub.restore(); - }); + cb = helpers.callback_from_args(arguments); + cb(err, resp, body); + stub.restore(); + }); return stub; @@ -81,18 +78,26 @@ helpers.stub_request = function(type, err, resp, body){ helpers.stub_provider = function(name, err, return_value) { var cb, - stub = sinon.stub(providers, 'get', function() { - - for (var i = 0, len = arguments.length; i < len; i++) { - if (typeof arguments[i] === 'function') { - cb = arguments[i] - } - } - - cb(err, return_value); - }); + stub = sinon.stub(providers, 'get', function() { + cb = helpers.callback_from_args(arguments); + cb(err, return_value); + }); return stub; }; +helpers.callback_from_args = function(args) { + var cb; + + for (var i = 0, len = args.length; i < len; i++) { + if (typeof args[i] === 'function') { + cb = args[i] + } + } + + return cb; +} + +helpers.lib_path = lib_path; + module.exports = helpers; diff --git a/test/lib/agent/providers/geo/geoip_strategy.js b/test/lib/agent/providers/geo/geoip_strategy.js index 60817b475..18decad31 100644 --- a/test/lib/agent/providers/geo/geoip_strategy.js +++ b/test/lib/agent/providers/geo/geoip_strategy.js @@ -2,117 +2,121 @@ var helpers = require('./../../../../helpers'), should = require('should'), geoip_strat = helpers.load('providers/geo/strategies').geoip; -describe('mocked location', function () { +describe('geoip', function () { - stub_request = function(body) { - helpers.stub_request('get', null, { statusCode: 200 }, body); - } + describe('with mocked location', function () { - describe('when response', function () { + var stub_request = function(body) { + helpers.stub_request('get', null, { statusCode: 200 }, body); + } - var body = {}; + describe('when response', function () { - describe('has no body', function () { - before(function() { - stub_request(body); - }); + var body = {}; + + describe('has no body', function () { + before(function() { + stub_request(body); + }); - it('returns error', function(done) { + it('returns error', function(done) { + + geoip_strat(function(err, res) { + should(res).be.nil; + should(err).be.instanceof.Error; + err.message.should.be.exactly('Unable to get location from IP.'); + done(); + }); - geoip_strat(function(err, res) { - should(res).be.nil; - should(err).be.instanceof.Error; - err.message.should.be.exactly('Unable to get location from IP.'); - done(); }); }); - }); + describe('has body but no loc', function () { + before(function () { + body = { + "ip": "8.8.8.8", + "hostname": "google-public-dns-a.google.com", + "org": "AS15169 Google Inc.", + "city": "Mountain View", + "region": "California", + "country": "US", + "phone": 650 + }; + + stub_request(body); + }); - describe('has body but no loc', function () { - before(function () { - body = { - "ip": "8.8.8.8", - "hostname": "google-public-dns-a.google.com", - "org": "AS15169 Google Inc.", - "city": "Mountain View", - "region": "California", - "country": "US", - "phone": 650 - }; - - stub_request(body); - }); + it('returns error', function(done) { - it('returns error', function(done) { + geoip_strat(function(err, res) { + should(res).be.nil; + should(err).be.instanceof.Error; + err.message.should.be.exactly('Unable to get location from IP.'); + done(); + }); - geoip_strat(function(err, res) { - should(res).be.nil; - should(err).be.instanceof.Error; - err.message.should.be.exactly('Unable to get location from IP.'); - done(); }); }); - }); + describe('has body with loc', function () { - describe('has body with loc', function () { + beforeEach(function () { - beforeEach(function () { + body = { + "ip": "8.8.8.8", + "hostname": "google-public-dns-a.google.com", + "loc": "37.385999999999996,-122.0838", + "org": "AS15169 Google Inc.", + "city": "Mountain View", + "region": "California", + "country": "US", + "phone": 650 + }; - body = { - "ip": "8.8.8.8", - "hostname": "google-public-dns-a.google.com", - "loc": "37.385999999999996,-122.0838", - "org": "AS15169 Google Inc.", - "city": "Mountain View", - "region": "California", - "country": "US", - "phone": 650 - }; + stub_request(body); + }); - stub_request(body); - }); + it('returns location', function(done) { - it('returns location', function(done) { + geoip_strat(function(err, res) { + should(err).be.nil; + res.lat.should.equal(37.385999999999996); + res.lng.should.equal(-122.0838); + done(); + }); - geoip_strat(function(err, res) { - should(err).be.nil; - res.lat.should.equal(37.385999999999996); - res.lng.should.equal(-122.0838); - done(); }); - }); + it('returns method equals to geoip', function(done) { - it('returns method equals to geoip', function(done) { + geoip_strat(function(err, res) { + should(err).be.nil; + res.method.should.equal('geoip'); + done(); + }); - geoip_strat(function(err, res) { - should(err).be.nil; - res.method.should.equal('geoip'); - done(); }); - }); + }); }); -}); - -describe('real end-point', function() { + describe('with real end-point', function() { - it('returns location', function(done) { - geoip_strat(function(err, res) { - should(err).be.nil; - should.exist(res.lat); - should.exist(res.lng); - should.exist(res.method); - res.method.should.equal('geoip'); - done(); + it('returns location', function(done) { + geoip_strat(function(err, res) { + should(err).be.nil; + should.exist(res.lat); + should.exist(res.lng); + should.exist(res.method); + res.method.should.equal('geoip'); + done(); + }); }); + }); }); diff --git a/test/lib/agent/providers/geo/geonative_strategy.js b/test/lib/agent/providers/geo/geonative_strategy.js new file mode 100644 index 000000000..3bc57df2c --- /dev/null +++ b/test/lib/agent/providers/geo/geonative_strategy.js @@ -0,0 +1,111 @@ +var helpers = require('./../../../../helpers'), + should = require('should'), + sinon = require('sinon'), + join = require('path').join, + lib_path = helpers.lib_path, + geo_path = join(lib_path, 'agent', 'providers', 'geo'), + geo_darwin = require(join(geo_path, 'darwin')), + geo_linux = require(join(geo_path, 'linux')), + geo_win = require(join(geo_path, 'win32')), + geonative_strat = helpers.load('providers/geo/strategies').geonative; + +describe('native geoloc', function () { + + var stub_get_location = function (platform, err, return_value) { + console.log(geo_darwin); + var cb, + stub = sinon.stub("geo_" + platform, 'get_location', function() { + cb = helpers.callback_from_args(arguments); + cb(err, return_value); + }); + + return stub; + } + + var successful_location = { + win: { + lat: 38.707163, + lng: -9.135517, + accuracy: 140000.0 + }, + linux: { + lat: 38.707163, + lng: -9.135517, + altitude: 140000.0 + }, + darwin: { + lat: 38.707163, + lng: -9.135517, + accuracy: 140000.0, + vertical_accuracy: 14000.0, + altitude: 140000.0 + } + }; + + var stub; + + describe('geonative strategy', function() { + + var platform = process.platform; + + describe('on successful location', function() { + + before(function() { + stub = stub_get_location(platform, null, successful_location[platform]); + }); + + after(function() { + stub.restore(); + }); + + it('returns location', function(done) { + geonative_strat(function(err, res) { + should(err).be.null; + res.should.exist; + res.lat.should.exist; + res.lng.should.exist; + res.method.should.equal('geonative'); + }); + }); + + }); + + describe('on error', function() {}); + + }); + + describe('win', function() { + + describe('when successful', function() { + + beforeEach(function() { + stub = stub_get_location('win', null, successful_location.win); + }); + + afterEach(function() { + stub = stub_get_location.restore(); + }); + + it('returns location', function(done) { + + }); + + }); + + }); + + describe('linux', function () { + + var succesful_location = + describe('when successful', function() {}); + + }); + + describe('darwin', function() { + + var succesful_location = + describe('when successful', function() {}); + + }); + +}); From 8cd548b7f723ab8d5096a696805cae4b8fa0e18b Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Tue, 14 Jul 2015 17:00:22 -0300 Subject: [PATCH 20/25] Fix spec for geonative strategy --- .../agent/providers/geo/geonative_strategy.js | 66 +++++++++++++++---- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/test/lib/agent/providers/geo/geonative_strategy.js b/test/lib/agent/providers/geo/geonative_strategy.js index 3bc57df2c..f2c21efa8 100644 --- a/test/lib/agent/providers/geo/geonative_strategy.js +++ b/test/lib/agent/providers/geo/geonative_strategy.js @@ -4,17 +4,18 @@ var helpers = require('./../../../../helpers'), join = require('path').join, lib_path = helpers.lib_path, geo_path = join(lib_path, 'agent', 'providers', 'geo'), - geo_darwin = require(join(geo_path, 'darwin')), - geo_linux = require(join(geo_path, 'linux')), - geo_win = require(join(geo_path, 'win32')), - geonative_strat = helpers.load('providers/geo/strategies').geonative; + geo = { + darwin: require(join(geo_path, 'darwin')), + linux: require(join(geo_path, 'linux')), + win: require(join(geo_path, 'win32')), + }, + geonative_strat = helpers.load('providers/geo/strategies').native; describe('native geoloc', function () { var stub_get_location = function (platform, err, return_value) { - console.log(geo_darwin); var cb, - stub = sinon.stub("geo_" + platform, 'get_location', function() { + stub = sinon.stub(geo[platform], 'get_location', function() { cb = helpers.callback_from_args(arguments); cb(err, return_value); }); @@ -51,7 +52,7 @@ describe('native geoloc', function () { describe('on successful location', function() { before(function() { - stub = stub_get_location(platform, null, successful_location[platform]); + stub = stub_get_location(platform, null, successful_location[platform]); }); after(function() { @@ -65,6 +66,7 @@ describe('native geoloc', function () { res.lat.should.exist; res.lng.should.exist; res.method.should.equal('geonative'); + done(); }); }); @@ -83,11 +85,15 @@ describe('native geoloc', function () { }); afterEach(function() { - stub = stub_get_location.restore(); + stub.restore(); }); it('returns location', function(done) { - + geo.win.get_location(function(err, res) { + should(err).be.null; + res.should.be.equal(successful_location.win); + done(); + }); }); }); @@ -96,15 +102,51 @@ describe('native geoloc', function () { describe('linux', function () { - var succesful_location = - describe('when successful', function() {}); + describe('when successful', function() { + + beforeEach(function() { + stub = stub_get_location('linux', null, successful_location.linux); + }); + + afterEach(function() { + stub.restore(); + }); + + it('returns location', function(done) { + geo.linux.get_location(function(err, res) { + should(err).be.null; + res.should.be.equal(successful_location.linux); + done(); + }); + }); + + + }); }); describe('darwin', function() { var succesful_location = - describe('when successful', function() {}); + describe('when successful', function() { + + beforeEach(function() { + stub = stub_get_location('darwin', null, successful_location.darwin); + }); + + afterEach(function() { + stub.restore(); + }); + + it('returns location', function(done) { + geo.darwin.get_location(function(err, res) { + should(err).be.null; + res.should.be.equal(successful_location.darwin); + done(); + }); + }); + + }); }); From b9bd1e06e95dc84363e20a74008c4ee150a8cb1f Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Tue, 14 Jul 2015 18:11:16 -0300 Subject: [PATCH 21/25] Add specs for errors on darwin geoloc strategy. --- lib/agent/providers/geo/darwin/index.js | 8 +-- lib/agent/providers/geo/win32/index.js | 4 +- test/helpers.js | 2 - .../agent/providers/geo/geonative_strategy.js | 53 ++++++++++++++++++- 4 files changed, 57 insertions(+), 10 deletions(-) diff --git a/lib/agent/providers/geo/darwin/index.js b/lib/agent/providers/geo/darwin/index.js index 3b4805e8e..790db894a 100644 --- a/lib/agent/providers/geo/darwin/index.js +++ b/lib/agent/providers/geo/darwin/index.js @@ -1,15 +1,15 @@ -var join = require('path').join, - exec = require('child_process').exec, +var join = require('path').join, + child_process = require('child_process'), common = require('../../../common'), system = common.system, - gte = common.helpers.is_greater_or_equal; + gte = common.helpers.is_greater_or_equal; // whereami bin from https://github.com/robmathers/WhereAmI var bin = join(__dirname, 'bin', 'whereami'); var get_using_corelocation = function(cb) { - exec(bin, function(err, out) { + child_process.exec(bin, function(err, out) { if (err) return cb(err); if (!out.toString().match('Latitude')) diff --git a/lib/agent/providers/geo/win32/index.js b/lib/agent/providers/geo/win32/index.js index 8f6f0f413..ecdfdc58d 100644 --- a/lib/agent/providers/geo/win32/index.js +++ b/lib/agent/providers/geo/win32/index.js @@ -17,10 +17,10 @@ exports.get_location = function(cb) { if (!geo.Geolocator) return cb(new Error('Unable to load geolocation module: ' + geo.message)) - + var loc = new geo.Geolocator(); loc.getGeopositionAsync(function(err, res) { - if (err || !res.coordinate) + if (err || !res.coordinate) return cb(err || new Error('Unable to get location.')) // console.log('Got result!'); diff --git a/test/helpers.js b/test/helpers.js index 9187369d9..d445e3787 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -98,6 +98,4 @@ helpers.callback_from_args = function(args) { return cb; } -helpers.lib_path = lib_path; - module.exports = helpers; diff --git a/test/lib/agent/providers/geo/geonative_strategy.js b/test/lib/agent/providers/geo/geonative_strategy.js index f2c21efa8..78cdbb04d 100644 --- a/test/lib/agent/providers/geo/geonative_strategy.js +++ b/test/lib/agent/providers/geo/geonative_strategy.js @@ -2,7 +2,9 @@ var helpers = require('./../../../../helpers'), should = require('should'), sinon = require('sinon'), join = require('path').join, - lib_path = helpers.lib_path, + lib_path = helpers.lib_path(), + system = require(join(lib_path, 'common')).system, + child_process = require('child_process'), geo_path = join(lib_path, 'agent', 'providers', 'geo'), geo = { darwin: require(join(geo_path, 'darwin')), @@ -127,7 +129,6 @@ describe('native geoloc', function () { describe('darwin', function() { - var succesful_location = describe('when successful', function() { beforeEach(function() { @@ -148,6 +149,54 @@ describe('native geoloc', function () { }); + describe('when Mac OS X version lower than 10.6', function() { + + var os_version_stub; + + before(function() { + os_version_stub = sinon.stub(system, 'get_os_version', function(cb) { + cb(null, "10.5"); + }); + }); + + after(function() { + os_version_stub.restore(); + }); + + it('returns error with "CoreLocation not supported" message', function(done) { + geo.darwin.get_location(function(err, res) { + err.should.exist; + err.message.should.equal("CoreLocation not suppored in OSX 10.5"); + done(); + }); + }); + + }); + + describe('when whereami output does not have latitue', function() { + + var exec_stub; + + before(function() { + exec_stub = sinon.stub(child_process, 'exec', function(bin, cb) { + return cb(null, {}); + }); + }); + + after(function() { + exec_stub.restore(); + }); + + it('returns error', function(done) { + geo.darwin.get_location(function(err, res) { + err.should.exist; + err.message.should.equal("Unable to get geoposition data using CoreLocation."); + done(); + }); + }); + + }); + }); }); From 701d9b9db9c1e2e3a88aae35ba4d2bd06ebf377f Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Tue, 14 Jul 2015 18:18:23 -0300 Subject: [PATCH 22/25] Add stub for os_version in case specs are ran in OS other than OS X. --- .../lib/agent/providers/geo/geonative_strategy.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/test/lib/agent/providers/geo/geonative_strategy.js b/test/lib/agent/providers/geo/geonative_strategy.js index 78cdbb04d..b75c50aa0 100644 --- a/test/lib/agent/providers/geo/geonative_strategy.js +++ b/test/lib/agent/providers/geo/geonative_strategy.js @@ -151,11 +151,12 @@ describe('native geoloc', function () { describe('when Mac OS X version lower than 10.6', function() { - var os_version_stub; + var os_version_stub, + os_version = "10.5.0"; before(function() { os_version_stub = sinon.stub(system, 'get_os_version', function(cb) { - cb(null, "10.5"); + cb(null, os_version); }); }); @@ -166,7 +167,7 @@ describe('native geoloc', function () { it('returns error with "CoreLocation not supported" message', function(done) { geo.darwin.get_location(function(err, res) { err.should.exist; - err.message.should.equal("CoreLocation not suppored in OSX 10.5"); + err.message.should.equal("CoreLocation not suppored in OSX " + os_version); done(); }); }); @@ -175,16 +176,22 @@ describe('native geoloc', function () { describe('when whereami output does not have latitue', function() { - var exec_stub; + var exec_stub, + os_version_stub; // needed when running specs on OS other than Mac OS X before(function() { exec_stub = sinon.stub(child_process, 'exec', function(bin, cb) { return cb(null, {}); }); + + os_version_stub = sinon.stub(system, 'get_os_version', function(cb) { + cb(null, "10.10.0"); + }); }); after(function() { exec_stub.restore(); + os_version_stub.restore(); }); it('returns error', function(done) { From 22fc4071328522971b7590c310ded4130d8c8fca Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Tue, 14 Jul 2015 18:55:59 -0300 Subject: [PATCH 23/25] Remove unnecessary whitespace --- lib/agent/helpers.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/agent/helpers.js b/lib/agent/helpers.js index 44133772a..28d231c42 100644 --- a/lib/agent/helpers.js +++ b/lib/agent/helpers.js @@ -52,9 +52,7 @@ function validate_versions(versions, method_name) { function handle_version_error(method_name, versions) { var err_msg = "Cannot run" + method_name + ". Invalid versions: "; - err_msg = err_msg.concat(versions.join(" ")); - exceptions.send(new Error(err_msg)); } From b8f14caa413bdddf2642a255a739b4ba9d2e3cf2 Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Tue, 14 Jul 2015 19:01:22 -0300 Subject: [PATCH 24/25] Remove extra vertical whitespace for consistency --- lib/agent/providers/geo/darwin/index.js | 6 +----- lib/agent/providers/geo/linux/index.js | 1 - lib/agent/providers/geo/strategies.js | 17 ++++++----------- 3 files changed, 7 insertions(+), 17 deletions(-) diff --git a/lib/agent/providers/geo/darwin/index.js b/lib/agent/providers/geo/darwin/index.js index 790db894a..fdbec4c60 100644 --- a/lib/agent/providers/geo/darwin/index.js +++ b/lib/agent/providers/geo/darwin/index.js @@ -8,7 +8,6 @@ var join = require('path').join, var bin = join(__dirname, 'bin', 'whereami'); var get_using_corelocation = function(cb) { - child_process.exec(bin, function(err, out) { if (err) return cb(err); @@ -31,17 +30,14 @@ var get_using_corelocation = function(cb) { } cb(null, res); - }) - + }); } exports.get_location = function(cb) { - system.get_os_version(function(err, version) { if (version && gte(version, "10.6.0")) return get_using_corelocation(cb); cb(new Error('CoreLocation not suppored in OSX ' + version)) }); - } \ No newline at end of file diff --git a/lib/agent/providers/geo/linux/index.js b/lib/agent/providers/geo/linux/index.js index 92990b787..77e6aa40a 100644 --- a/lib/agent/providers/geo/linux/index.js +++ b/lib/agent/providers/geo/linux/index.js @@ -42,7 +42,6 @@ function get_command_one(provider) { return [bin, '--print-reply', '--dest=' + service, path, command].join(' '); } - function geoclue_one(provider, cb) { var cmd = get_command_one(provider); diff --git a/lib/agent/providers/geo/strategies.js b/lib/agent/providers/geo/strategies.js index cc64d1ca5..5560d738b 100644 --- a/lib/agent/providers/geo/strategies.js +++ b/lib/agent/providers/geo/strategies.js @@ -1,14 +1,13 @@ "use strict" var join = require('path').join, - needle = require('needle'), - get_agent = require('random-ua').generate, - platform = require(join(__dirname, process.platform)), - providers = require('./../../providers'), - logger = require('../../common').logger.prefix('geo'); + needle = require('needle'), + get_agent = require('random-ua').generate, + platform = require(join(__dirname, process.platform)), + providers = require('./../../providers'), + logger = require('../../common').logger.prefix('geo'); function geoip(cb) { - logger.debug("Getting location via geoip"); needle.get('http://ipinfo.io/geo', function(err, resp, body) { @@ -25,11 +24,10 @@ function geoip(cb) { } cb(null, res); - }) + }); } function google(cb) { - logger.debug("Getting location via google api"); providers.get('access_points_list', function(err, list) { @@ -64,7 +62,6 @@ function google(cb) { } function process_response(body, cb) { - logger.debug("Processing Google API response"); var coords; @@ -93,11 +90,9 @@ function google(cb) { return cb(null, data); } - } function geonative(cb) { - logger.debug("Getting location via native geoloc"); platform.get_location(function(err, res) { From a192d17128dacad13a959ebace77e199616fea0d Mon Sep 17 00:00:00 2001 From: Mauricio Schneider Date: Tue, 14 Jul 2015 19:13:37 -0300 Subject: [PATCH 25/25] Add specs to google geoloc for when access_point_list returns error. --- .../lib/agent/providers/geo/geoip_strategy.js | 4 +-- .../agent/providers/geo/google_strategy.js | 28 +++++++++++++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/test/lib/agent/providers/geo/geoip_strategy.js b/test/lib/agent/providers/geo/geoip_strategy.js index 18decad31..35728952d 100644 --- a/test/lib/agent/providers/geo/geoip_strategy.js +++ b/test/lib/agent/providers/geo/geoip_strategy.js @@ -1,6 +1,6 @@ var helpers = require('./../../../../helpers'), - should = require('should'), - geoip_strat = helpers.load('providers/geo/strategies').geoip; + should = require('should'), + geoip_strat = helpers.load('providers/geo/strategies').geoip; describe('geoip', function () { diff --git a/test/lib/agent/providers/geo/google_strategy.js b/test/lib/agent/providers/geo/google_strategy.js index b1c7e58d0..293a2d6d0 100644 --- a/test/lib/agent/providers/geo/google_strategy.js +++ b/test/lib/agent/providers/geo/google_strategy.js @@ -1,15 +1,31 @@ var helpers = require('./../../../../helpers'), - should = require('should'), - google_strat = helpers.load('providers/geo/strategies').google, - location_response = require('../fixtures/google_location_response'); + should = require('should'), + google_strat = helpers.load('providers/geo/strategies').google, + location_response = require('../fixtures/google_location_response'); describe('location', function() { - describe('when access points return error', function() { + describe('when access points list return error', function() { - }); + var provider_stub = {}, + error = new Error('No access points found.'); + + before(function() { + provider_stub = helpers.stub_provider('access_points_list', error, null); + }); + + after(function() { + provider_stub.restore(); + }); - describe('when access points list is empty', function() { + it('returns error', function(done) { + google_strat(function(err, res) { + should(res).not.exist; + err.should.exist; + err.should.equal(error); + done(); + }); + }); });