gsel 0,-1 onerror *bye onexit *leave #define SELF_VER "1.0.1.2" #define SELF_NAME "My Privacy DNS Reporter" #define CONF_FILE "mypdns.conf" title SELF_NAME exist "hspext.dll":if (strsize==-1){dialog "DLL not found",1,SELF_NAME:end} exist dir_cur+"/curl.exe":if (strsize==-1){ exist dir_sys+"/curl.exe":if (strsize==-1){ dialog "curl.exe not found",1,SELF_NAME:end }else{_curl=dir_sys+"/curl.exe"} }else{_curl=dir_cur+"/curl.exe"} #module #defcfunc sub str o, str ai, str al org = o : aim = ai : alt = al bef = "" : af = "" r = instr(org,0,aim) if r = -1 : return org bef = strmid(org,0,r) af = strmid(org,-1,strlen(org)-strlen(bef)-strlen(aim)) return bef+alt+af #defcfunc gsub str o, str ai, str al org = o : aim = ai : alt = al res = org repeat r = instr(res,0,aim) if r = -1 : break res = sub(res,aim,alt) loop return res #deffunc __initBase64 if fInitBase64:return encodeTable="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" dim decodeTable,256/4 : memset decodeTable,128,256 repeat 26:poke decodeTable,'A'+cnt,cnt:loop repeat 26:poke decodeTable,'a'+cnt,cnt+26:loop repeat 10:poke decodeTable,'0'+cnt,cnt+52:loop poke decodeTable,'+',62 poke decodeTable,'/',63 poke decodeTable,13,129 poke decodeTable,10,129 poke decodeTable,'=',254 poke decodeTable,0,255 fInitBase64=1 return #defcfunc EncodeBase64 var src,int srclen __InitBase64 mref destIndex,64 dest="":memexpand dest,(srclen+2)/3*4+(srclen+2)/3*4/76*2+1 srcIndex=0 : destIndex=0 repeat srclen/3 rdata=peek(src,srcIndex)<<16 | peek(src,srcIndex+1)<<8 | peek(src,srcIndex+2) poke dest,destIndex,peek(encodeTable,rdata>>18) poke dest,destIndex+1,peek(encodeTable,rdata>>12&63) poke dest,destIndex+2,peek(encodeTable,rdata>>6&63) poke dest,destIndex+3,peek(encodeTable,rdata&63) srcIndex+=3 : destIndex+=4 if destIndex\78==76: poke dest,destIndex,"\n" : destIndex+=2 loop if srclen\3>0{ rdata=peek(src,srcIndex) poke dest,destIndex,peek(encodeTable,rdata>>2) if srclen\3==1{ poke dest,destIndex+1,peek(encodeTable,rdata<<4&63) wpoke dest,destIndex+2,0x3d3d }else{ rdata=(rdata&3)<<8 | peek(src,srcIndex+1) poke dest,destIndex+1,peek(encodeTable,rdata>>4) poke dest,destIndex+2,peek(encodeTable,rdata<<2&63) poke dest,destIndex+3,'=' } destIndex+=4 if destIndex\78==76: poke dest,destIndex,"\n" : destIndex+=2 } poke dest,destIndex,0 return gsub(dest,"\n","") #global #include "hspext.as" //load conf sdim _conf,10240 exist CONF_FILE:if (strsize==-1){ notesel _conf noteadd "50\n50\n-\n#noTop\n#useTor" notesave CONF_FILE } exist CONF_FILE:if (strsize==-1){dialog "Config file not found",1:end} _conf="" notesel _conf noteload CONF_FILE noteget iX,0:noteget iY,1 screen 0,450,340,12,int(iX),int(iY) noteget sTOKEN,2 noteget snTOP,3:if (instr(snTOP,0,"no")==0){wTOP=1}else{wTOP=2} noteget suTOR,4:if (instr(suTOR,0,"use")==0){pTor=1}else{pTor=0} noteunsel color 249,249,251:boxf font "Segoe UI",15:objmode 2,1 _dnc=0 _url="" _cat=0 _cats="-\nAdware\nCoin Blocker\nDrugs\nGambling\nGore\nMalicious\nMovies\nNews\nPhishing\nPirated\nPolitics\nPorn\nPorn (Strict)\nUrl Shortener\nReligion\nScamming\nSnuff\nSpyware\nTorrent\nTracking\nTypo Squatting\nWeapons" _catsREAL="-\nadware\ncoinblocker\ndrugs\ngambling\nporngore\nmalicious\nmovies\nnews\nphishing\npirated\npolitics\nporn\npornstrict\nredirector\nreligion\nscamming\npornsnuff\nspyware\ntorrent\ntracking\ntyposquatting\nweapons" _msg="" _nfo="Version "+SELF_VER pos 10,10:picload "link.png",1 pos 10,50:picload "com.png",1 pos 10,160:picload "cat.png",1 pos 55,5:input _url,385,30,0 pos 55,45:mesbox _msg,385,100,1,400 pos 55,155:objsize 180,30:combox _cat,10,_cats pos 290,155:objsize 150,30:button "Report",*uiReport pos 0,190:mesbox _nfo,450,110,0,0 pos 5,305:input sTOKEN,300,30,0 pos 340,305:objsize 100,30:button "Set Token",*uiSetToken if (strlen(sTOKEN)!=20){ objenable 0,0 objenable 1,0 objenable 2,0 objenable 3,0 objprm 4,"Your token is not set. Create your token:\n\nhttps://mypdns.org/-/profile/personal_access_tokens?name=mypdnsrep-gui&scopes=read_user,api" objprm 5,"" objsel 5 }else{ objenable 5,0 objenable 6,0 width 450,300 objsel 0 } gsel 0,int(wTOP) stop *uiSetToken if (strlen(sTOKEN)!=20){stop} objenable 5,0 objenable 6,0 notesel _conf noteadd sTOKEN,2,1 notesave CONF_FILE noteunsel width 450,300 objprm 4,"Welcome!\nThank you for helping out this project." goto *uiEnable stop *uiEnable if (_dnc!=1){objprm 0,"":objprm 1,"":objprm 2,0} _dnc=0 objenable 0,1 objenable 1,1 objenable 2,1 objenable 3,1 objsel 0 stop *uiReport _url=gsub(gsub(_url,"'",""),"\"","") if (strlen(_url)<4||_cat<=0){objprm 4,"Invalid.":stop} now_URL=_url if (instr(now_URL,0,"://")<4){now_URL="http://"+now_URL} notesel _catsREAL:noteget now_cat,_cat:noteunsel if (strlen(now_cat)<4){objprm 4,"Invalid.":stop} if (strlen(_msg)>=4){now_msg=EncodeBase64(_msg,strlen(_msg))}else{now_msg=""} objenable 0,0 objenable 1,0 objenable 2,0 objenable 3,0 objprm 4,"Reporting..." sdim ln,4096:sdim buf,32000 _cmd=_curl+" -s --connect-timeout 9 --max-time 60 -k --http2 " if (pTor==1){_cmd+="-x socks5h://127.0.0.1:9050 "} _cmd+="-d \"k="+sTOKEN+"&cat="+now_cat+"&url="+now_URL if (now_msg!=""){_cmd+="&wmemo="+now_msg} _cmd+="\" -X POST https://karma.crimeflare.eu.org:1984/api/mypdns/" pipeexec buf,_cmd,0 if (stat){objprm 4,"/!\\ curl Error!":goto *uiEnable} repeat pipeget ln:if (stat==0){break} await 100 loop if (instr(buf,0,"{\"reply\":\"")!=0){_dnc=1:objprm 4,"/!\\ Server response failed.\nTry again later.":goto *uiEnable} split buf,",\"issue\":",msgA,msgB:buf="" msgA=sub(msgA,"}","") msgL=strmid(msgA,9,255) if (instr(msgL,0,"\"Issue for this domain is already exist.")==0){ msgL+="\n\nhttps://mypdns.org/my-privacy-dns/matrix/-/issues/" msgB=gsub(sub(sub(msgB,"]",""),"}",""),"\"","") msgL+=msgB } if (msgA=="{\"reply\":\"roger\""){msgL="Reported."} objprm 4,msgL goto *uiEnable stop *leave gsel 0,-1 notesel _conf noteadd str(ginfo(4)),0,1 noteadd str(ginfo(5)),1,1 notesave CONF_FILE noteunsel end *bye end