/*
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"
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 = L"api_option=paste&api_paste_private=";
content += Options::instance->webOptions[pageIndex]->publicPaste ? L"0" : L"1";
content += L"&api_paste_expire_date=";
content += Options::instance->webOptions[pageIndex]->combo1.empty() ? L"1M" : Options::instance->webOptions[pageIndex]->combo1;
content += L"&api_dev_key=dcba056bf9cc71729fdad76dddcb0dcd&api_paste_format=";
content += format;
if (!Options::instance->webOptions[pageIndex]->pastebinUserKey.empty())
{
content += L"&api_user_key=";
content += Options::instance->webOptions[pageIndex]->pastebinUserKey;
}
content += L"&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 != nullptr)
{
if (memcmp(L"Bad API request, ", resCont, 17 * sizeof(wchar_t)) == 0)
{
mir_snwprintf(bufErr, TranslateT("Error during sending text to web page: %s"), resCont + 17);
error = bufErr;
}
else
{
char* s = mir_u2a_cp(resCont, CP_ACP);
mir_strncpy(szFileLink, s, _countof(szFileLink));
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 = L"api_user_name=";
content += user;
content += L"&api_user_password=";
content += password;
content += L"&api_dev_key=dcba056bf9cc71729fdad76dddcb0dcd";
wchar_t* resCont = SendToWeb("http://pastebin.com/api/api_login.php", headers, content);
std::wstring toRet;
if (resCont != nullptr)
{
if (memcmp(L"Bad API request, ", resCont, 17 * sizeof(wchar_t)) == 0)
{
mir_snwprintf(bufErr, TranslateT("Error during getting user key from web page: %s"), resCont + 17);
MessageBox(nullptr, 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;
}