/* Paste It plugin Copyright (C) 2011 Krzysztof Kral This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "StdAfx.h" #include "PasteToWeb1.h" #include "Options.h" PasteFormat PasteToWeb1::formats[] = { {L"4cs", L"4CS"}, {L"6502acme", L"6502 ACME Cross Assembler"}, {L"6502kickass", L"6502 Kick Assembler"}, {L"6502tasm", L"6502 TASM/64TASS"}, {L"abap", L"ABAP"}, {L"actionscript", L"ActionScript"}, {L"actionscript3", L"ActionScript 3"}, {L"ada", L"Ada"}, {L"algol68", L"ALGOL 68"}, {L"apache", L"Apache Log"}, {L"applescript", L"AppleScript"}, {L"apt_sources", L"APT Sources"}, {L"asm", L"ASM (NASM)"}, {L"asp", L"ASP"}, {L"autoconf", L"autoconf"}, {L"autohotkey", L"Autohotkey"}, {L"autoit", L"AutoIt"}, {L"avisynth", L"Avisynth"}, {L"awk", L"Awk"}, {L"bascomavr", L"BASCOM AVR"}, {L"bash", L"Bash"}, {L"basic4gl", L"Basic4GL"}, {L"bibtex", L"BibTeX"}, {L"blitzbasic", L"Blitz Basic"}, {L"bnf", L"BNF"}, {L"boo", L"BOO"}, {L"bf", L"BrainFuck"}, {L"c", L"C"}, {L"c_mac", L"C for Macs"}, {L"cil", L"C Intermediate Language"}, {L"csharp", L"C#"}, {L"cpp", L"C++"}, {L"cpp-qt", L"C++ (with QT extensions)"}, {L"c_loadrunner", L"C: Loadrunner"}, {L"caddcl", L"CAD DCL"}, {L"cadlisp", L"CAD Lisp"}, {L"cfdg", L"CFDG"}, {L"chaiscript", L"ChaiScript"}, {L"clojure", L"Clojure"}, {L"klonec", L"Clone C"}, {L"klonecpp", L"Clone C++"}, {L"cmake", L"CMake"}, {L"cobol", L"COBOL"}, {L"coffeescript", L"CoffeeScript"}, {L"cfm", L"ColdFusion"}, {L"css", L"CSS"}, {L"cuesheet", L"Cuesheet"}, {L"d", L"D"}, {L"dcs", L"DCS"}, {L"delphi", L"Delphi"}, {L"oxygene", L"Delphi Prism (Oxygene)"}, {L"diff", L"Diff"}, {L"div", L"DIV"}, {L"dos", L"DOS"}, {L"dot", L"DOT"}, {L"e", L"E"}, {L"ecmascript", L"ECMAScript"}, {L"eiffel", L"Eiffel"}, {L"email", L"Email"}, {L"epc", L"EPC"}, {L"erlang", L"Erlang"}, {L"fsharp", L"F#"}, {L"falcon", L"Falcon"}, {L"fo", L"FO Language"}, {L"f1", L"Formula One"}, {L"fortran", L"Fortran"}, {L"freebasic", L"FreeBasic"}, {L"gambas", L"GAMBAS"}, {L"gml", L"Game Maker"}, {L"gdb", L"GDB"}, {L"genero", L"Genero"}, {L"genie", L"Genie"}, {L"gettext", L"GetText"}, {L"go", L"Go"}, {L"groovy", L"Groovy"}, {L"gwbasic", L"GwBasic"}, {L"haskell", L"Haskell"}, {L"hicest", L"HicEst"}, {L"hq9plus", L"HQ9 Plus"}, {L"html4strict", L"HTML"}, {L"html5", L"HTML 5"}, {L"icon", L"Icon"}, {L"idl", L"IDL"}, {L"ini", L"INI file"}, {L"inno", L"Inno Script"}, {L"intercal", L"INTERCAL"}, {L"io", L"IO"}, {L"j", L"J"}, {L"java", L"Java"}, {L"java5", L"Java 5"}, {L"javascript", L"JavaScript"}, {L"jquery", L"jQuery"}, {L"kixtart", L"KiXtart"}, {L"latex", L"Latex"}, {L"lb", L"Liberty BASIC"}, {L"lsl2", L"Linden Scripting"}, {L"lisp", L"Lisp"}, {L"llvm", L"LLVM"}, {L"locobasic", L"Loco Basic"}, {L"logtalk", L"Logtalk"}, {L"lolcode", L"LOL Code"}, {L"lotusformulas", L"Lotus Formulas"}, {L"lotusscript", L"Lotus Script"}, {L"lscript", L"LScript"}, {L"lua", L"Lua"}, {L"m68k", L"M68000 Assembler"}, {L"magiksf", L"MagikSF"}, {L"make", L"Make"}, {L"mapbasic", L"MapBasic"}, {L"matlab", L"MatLab"}, {L"mirc", L"mIRC"}, {L"mmix", L"MIX Assembler"}, {L"modula2", L"Modula 2"}, {L"modula3", L"Modula 3"}, {L"68000devpac", L"Motorola 68000 HiSoft Dev"}, {L"mpasm", L"MPASM"}, {L"mxml", L"MXML"}, {L"mysql", L"MySQL"}, {L"newlisp", L"newLISP"}, {L"text", L"None"}, {L"nsis", L"NullSoft Installer"}, {L"oberon2", L"Oberon 2"}, {L"objeck", L"Objeck Programming Langua"}, {L"objc", L"Objective C"}, {L"ocaml-brief", L"OCalm Brief"}, {L"ocaml", L"OCaml"}, {L"pf", L"OpenBSD PACKET FILTER"}, {L"glsl", L"OpenGL Shading"}, {L"oobas", L"Openoffice BASIC"}, {L"oracle11", L"Oracle 11"}, {L"oracle8", L"Oracle 8"}, {L"oz", L"Oz"}, {L"pascal", L"Pascal"}, {L"pawn", L"PAWN"}, {L"pcre", L"PCRE"}, {L"per", L"Per"}, {L"perl", L"Perl"}, {L"perl6", L"Perl 6"}, {L"php", L"PHP"}, {L"php-brief", L"PHP Brief"}, {L"pic16", L"Pic 16"}, {L"pike", L"Pike"}, {L"pixelbender", L"Pixel Bender"}, {L"plsql", L"PL/SQL"}, {L"postgresql", L"PostgreSQL"}, {L"povray", L"POV-Ray"}, {L"powershell", L"Power Shell"}, {L"powerbuilder", L"PowerBuilder"}, {L"proftpd", L"ProFTPd"}, {L"progress", L"Progress"}, {L"prolog", L"Prolog"}, {L"properties", L"Properties"}, {L"providex", L"ProvideX"}, {L"purebasic", L"PureBasic"}, {L"pycon", L"PyCon"}, {L"python", L"Python"}, {L"q", L"q/kdb+"}, {L"qbasic", L"QBasic"}, {L"rsplus", L"R"}, {L"rails", L"Rails"}, {L"rebol", L"REBOL"}, {L"reg", L"REG"}, {L"robots", L"Robots"}, {L"rpmspec", L"RPM Spec"}, {L"ruby", L"Ruby"}, {L"gnuplot", L"Ruby Gnuplot"}, {L"sas", L"SAS"}, {L"scala", L"Scala"}, {L"scheme", L"Scheme"}, {L"scilab", L"Scilab"}, {L"sdlbasic", L"SdlBasic"}, {L"smalltalk", L"Smalltalk"}, {L"smarty", L"Smarty"}, {L"sql", L"SQL"}, {L"systemverilog", L"SystemVerilog"}, {L"tsql", L"T-SQL"}, {L"tcl", L"TCL"}, {L"teraterm", L"Tera Term"}, {L"thinbasic", L"thinBasic"}, {L"typoscript", L"TypoScript"}, {L"unicon", L"Unicon"}, {L"uscript", L"UnrealScript"}, {L"vala", L"Vala"}, {L"vbnet", L"VB.NET"}, {L"verilog", L"VeriLog"}, {L"vhdl", L"VHDL"}, {L"vim", L"VIM"}, {L"visualprolog", L"Visual Pro Log"}, {L"vb", L"VisualBasic"}, {L"visualfoxpro", L"VisualFoxPro"}, {L"whitespace", L"WhiteSpace"}, {L"whois", L"WHOIS"}, {L"winbatch", L"Win Batch"}, {L"xbasic", L"XBasic"}, {L"xml", L"XML"}, {L"xorg_conf", L"Xorg Config"}, {L"xpp", L"XPP"}, {L"yaml", L"YAML"}, {L"z80", L"Z80 Assembler"}, {L"zxbasic", L"ZXBasic"}, }; PasteFormat PasteToWeb1::defFormats[] = { {L"text", L"None"}, {L"xml", L"XML"}, {L"html4strict", L"HTML"}, {L"html5", L"HTML 5"}, {L"javascript", L"JavaScript"}, {L"php", L"PHP"}, {L"c", L"C"}, {L"csharp", L"C#"}, {L"cpp", L"C++"}, {L"java", L"Java"}, {L"java5", L"Java 5"}, {L"ini", L"INI file"}, {L"css", L"CSS"}, {L"sql", L"SQL"}, {L"asm", L"ASM (NASM)"}, {L"asp", L"ASP"}, {L"caddcl", L"CAD DCL"}, {L"cadlisp", L"CAD Lisp"}, {L"delphi", L"Delphi"}, {L"diff", L"Diff"}, {L"jquery", L"jQuery"}, {L"latex", L"Latex"}, {L"pascal", L"Pascal"}, {L"perl", L"Perl"}, {L"perl6", L"Perl 6"}, {L"python", L"Python"}, {L"vbnet", L"VB.NET"}, {L"vb", L"VisualBasic"}, }; PasteToWeb1::PasteToWeb1() { } PasteToWeb1::~PasteToWeb1() { } void PasteToWeb1::SendToServer(std::wstring str, std::wstring fileName, std::wstring format) { std::map headers; headers["Content-Type"] = "application/x-www-form-urlencoded"; std::wstring content = _T("api_option=paste&api_paste_private="); content += Options::instance->webOptions[pageIndex]->publicPaste ? _T("0") : _T("1"); content += _T("&api_paste_expire_date="); content += Options::instance->webOptions[pageIndex]->combo1.empty() ? _T("1M") : Options::instance->webOptions[pageIndex]->combo1; content += _T("&api_dev_key=dcba056bf9cc71729fdad76dddcb0dcd&api_paste_format="); content += format; if(!Options::instance->webOptions[pageIndex]->pastebinUserKey.empty()) { content += _T("&api_user_key="); content += Options::instance->webOptions[pageIndex]->pastebinUserKey; } content += _T("&api_paste_code="); for(std::wstring::iterator it = str.begin(); it != str.end(); ++it) { if(*it == L'%') { content += L"%25"; } else if(*it ==L'&') { content += L"%26"; } else if(*it ==L'=') { content += L"%3D"; } else { content += *it; } } wchar_t* resCont = SendToWeb("http://pastebin.com/api/api_post.php", headers, content); if(resCont != NULL) { if(memcmp(L"Bad API request, ", resCont, 17 * sizeof(wchar_t)) == 0) { _stprintf_s(bufErr, 1024, TranslateT("Error during sending text to web page: %s"), resCont + 17); error = bufErr; } else { char* s = mir_u2a_cp(resCont, CP_ACP); strcpy_s(szFileLink, 256, s); mir_free(s); } mir_free(resCont); } else { error = TranslateT("Error during sending text to web page"); } } std::wstring PasteToWeb1::GetUserKey(std::wstring& user, std::wstring& password) { std::map headers; headers["Content-Type"] = "application/x-www-form-urlencoded"; std::wstring content = _T("api_user_name="); content += user; content += _T("&api_user_password="); content += password; content += _T("&api_dev_key=dcba056bf9cc71729fdad76dddcb0dcd"); wchar_t* resCont = SendToWeb("http://pastebin.com/api/api_login.php", headers, content); std::wstring toRet; if(resCont != NULL) { if(memcmp(L"Bad API request, ", resCont, 17 * sizeof(wchar_t)) == 0) { _stprintf_s(bufErr, 1024, TranslateT("Error during getting user key from web page: %s"), resCont + 17); MessageBox(NULL, bufErr, TranslateT("Error"), MB_OK | MB_ICONERROR); } else toRet = resCont; mir_free(resCont); } return toRet; } std::list PasteToWeb1::GetFormats() { int count = sizeof(formats) / sizeof(formats[0]); std::list ret(formats, formats + count); return ret; } std::list PasteToWeb1::GetDefFormats() { int count = sizeof(defFormats) / sizeof(defFormats[0]); std::list ret(defFormats, defFormats + count); return ret; } void PasteToWeb1::ConfigureSettings() { Options::instance->webOptions[pageIndex]->isSendFileName = false; Options::instance->webOptions[pageIndex]->isPublicPaste = true; Options::instance->webOptions[pageIndex]->isCombo1 = true; Options::instance->webOptions[pageIndex]->combo1Desc = TranslateT("Paste expire date"); PasteFormat pf; pf.id = L"N"; pf.name = TranslateT("Never"); Options::instance->webOptions[pageIndex]->combo1Values.push_back(pf); pf.id = L"10M"; pf.name = TranslateT("10 minutes"); Options::instance->webOptions[pageIndex]->combo1Values.push_back(pf); pf.id = L"1H"; pf.name = TranslateT("1 hour"); Options::instance->webOptions[pageIndex]->combo1Values.push_back(pf); pf.id = L"1D"; pf.name = TranslateT("1 day"); Options::instance->webOptions[pageIndex]->combo1Values.push_back(pf); pf.id = L"1M"; pf.name = TranslateT("1 month"); Options::instance->webOptions[pageIndex]->combo1Values.push_back(pf); Options::instance->webOptions[pageIndex]->combo1 = L"1M"; Options::instance->webOptions[pageIndex]->isPastebin = true; }