diff options
| author | Remko Tronçon <git@el-tramo.be> | 2014-02-01 11:48:54 (GMT) |
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2014-02-02 09:42:58 (GMT) |
| commit | f44ea24fda0f08195180215a30bc626d7c1907c5 (patch) | |
| tree | a1bb160a98a497dbf01b82bbf559e99b6c1dfad9 /Sluift | |
| parent | 3d881ddd0b65d3a2bc1213386fb75fd95e4de691 (diff) | |
| download | swift-contrib-f44ea24fda0f08195180215a30bc626d7c1907c5.zip swift-contrib-f44ea24fda0f08195180215a30bc626d7c1907c5.tar.bz2 | |
Sluift: Add new_certificate
Change-Id: If4e4ef98c00f15c0a88557860f0377843a8713c0
Diffstat (limited to 'Sluift')
| -rw-r--r-- | Sluift/Lua/Check.cpp | 12 | ||||
| -rw-r--r-- | Sluift/Lua/Check.h | 5 | ||||
| -rw-r--r-- | Sluift/Lua/LuaUtils.cpp | 8 | ||||
| -rw-r--r-- | Sluift/Lua/LuaUtils.h | 2 | ||||
| -rw-r--r-- | Sluift/SluiftGlobals.h | 2 | ||||
| -rw-r--r-- | Sluift/core.lua | 10 | ||||
| -rw-r--r-- | Sluift/sluift.cpp | 44 |
7 files changed, 78 insertions, 5 deletions
diff --git a/Sluift/Lua/Check.cpp b/Sluift/Lua/Check.cpp index 65ada7b..a9b8f02 100644 --- a/Sluift/Lua/Check.cpp +++ b/Sluift/Lua/Check.cpp @@ -1,4 +1,4 @@ /* - * Copyright (c) 2013 Remko Tronçon + * Copyright (c) 2013-2014 Remko Tronçon * Licensed under the GNU General Public License. * See the COPYING file for more information. @@ -13,4 +13,5 @@ #include <Sluift/Lua/Exception.h> +#include <Swiften/Base/ByteArray.h> using namespace Swift; @@ -44,4 +45,13 @@ std::string Lua::checkString(lua_State* L, int arg) { } +ByteArray Lua::checkByteArray(lua_State* L, int arg) { + size_t len; + const char *s = lua_tolstring(L, arg, &len); + if (!s) { + throw Lua::Exception(getArgTypeError(L, arg, LUA_TSTRING)); + } + return createByteArray(s, len); +} + void* Lua::checkUserDataRaw(lua_State* L, int arg) { void* userData = lua_touserdata(L, arg); diff --git a/Sluift/Lua/Check.h b/Sluift/Lua/Check.h index 8a8b64a..c22751b 100644 --- a/Sluift/Lua/Check.h +++ b/Sluift/Lua/Check.h @@ -1,4 +1,4 @@ /* - * Copyright (c) 2013 Remko Tronçon + * Copyright (c) 2013-2014 Remko Tronçon * Licensed under the GNU General Public License. * See the COPYING file for more information. @@ -9,4 +9,6 @@ #include <string> +#include <Swiften/Base/ByteArray.h> + struct lua_State; @@ -16,4 +18,5 @@ namespace Swift { int checkIntNumber(lua_State* L, int arg); std::string checkString(lua_State* L, int arg); + ByteArray checkByteArray(lua_State* L, int arg); void* checkUserDataRaw(lua_State* L, int arg); diff --git a/Sluift/Lua/LuaUtils.cpp b/Sluift/Lua/LuaUtils.cpp index 915f3cc..dbadaab 100644 --- a/Sluift/Lua/LuaUtils.cpp +++ b/Sluift/Lua/LuaUtils.cpp @@ -190,2 +190,10 @@ void Swift::Lua::registerExtraHelp(lua_State* L, int index, const std::string& n lua_pop(L, 3); } + +void Swift::Lua::pushStringArray(lua_State* L, const std::vector<std::string>& strings) { + lua_createtable(L, strings.size(), 0); + for (size_t i = 0; i < strings.size(); ++i) { + lua_pushstring(L, strings[i].c_str()); + lua_rawseti(L, -2, boost::numeric_cast<int>(i+1)); + } +} diff --git a/Sluift/Lua/LuaUtils.h b/Sluift/Lua/LuaUtils.h index 105f249..ed4fcc1 100644 --- a/Sluift/Lua/LuaUtils.h +++ b/Sluift/Lua/LuaUtils.h @@ -38,4 +38,6 @@ namespace Swift { boost::optional<bool> getBooleanField(lua_State* L, int index, const std::string&); boost::optional<int> getIntField(lua_State* L, int index, const std::string&); + + void pushStringArray(lua_State* L, const std::vector<std::string>& strings); } } diff --git a/Sluift/SluiftGlobals.h b/Sluift/SluiftGlobals.h index e89f495..9d9cc51 100644 --- a/Sluift/SluiftGlobals.h +++ b/Sluift/SluiftGlobals.h @@ -10,4 +10,5 @@ #include <Swiften/EventLoop/SimpleEventLoop.h> #include <Swiften/Network/BoostNetworkFactories.h> +#include <Swiften/TLS/PlatformTLSFactories.h> #ifdef HAVE_ITUNES #include <Sluift/ITunesInterface.h> @@ -26,4 +27,5 @@ namespace Swift { SimpleEventLoop eventLoop; BoostNetworkFactories networkFactories; + PlatformTLSFactories tlsFactories; int coreLibIndex; int moduleLibIndex; diff --git a/Sluift/core.lua b/Sluift/core.lua index 9e81575..48b8a97 100644 --- a/Sluift/core.lua +++ b/Sluift/core.lua @@ -7,5 +7,5 @@ local sluift = select(1, ...) local _G = _G -local pairs, ipairs, print, tostring, type, error, assert, next, rawset, xpcall, unpack = pairs, ipairs, print, tostring, type, error, assert, next, rawset, xpcall, unpack +local pairs, ipairs, print, tostring, type, error, assert, next, rawset, xpcall, unpack, io = pairs, ipairs, print, tostring, type, error, assert, next, rawset, xpcall, unpack, io local setmetatable, getmetatable = setmetatable, getmetatable local string = require "string" @@ -436,4 +436,11 @@ local function call(options) end +local function read_file(file) + local f = io.open(file, 'rb') + local result = f:read('*all') + f:close() + return result +end + -------------------------------------------------------------------------------- -- Metatables @@ -1006,4 +1013,5 @@ return { process_pubsub_event = process_pubsub_event, tprint = tprint, + read_file = read_file, disco = disco, get_help = get_help, diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp index 37cb4f2..858e634 100644 --- a/Sluift/sluift.cpp +++ b/Sluift/sluift.cpp @@ -1,4 +1,4 @@ /* - * Copyright (c) 2011-2013 Remko Tronçon + * Copyright (c) 2011-2014 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. @@ -27,4 +27,6 @@ #include <Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h> #include <Swiften/Serializer/PayloadSerializer.h> +#include <Swiften/TLS/Certificate.h> +#include <Swiften/TLS/CertificateFactory.h> #include <Sluift/LuaElementConvertor.h> #include <Sluift/Lua/Debug.h> @@ -179,4 +181,40 @@ SLUIFT_LUA_FUNCTION_WITH_HELP( /******************************************************************************* + * Crypto functions + ******************************************************************************/ + +SLUIFT_LUA_FUNCTION_WITH_HELP( + Crypto, new_certificate, + "Creates a new X.509 certificate from DER data.\n", + + "der the DER-encoded certificate data", + + "") { + ByteArray certData(Lua::checkByteArray(L, 1)); + Certificate::ref cert(Sluift::globals.tlsFactories.getCertificateFactory()->createCertificateFromDER(certData)); + lua_createtable(L, 0, 0); + lua_pushstring(L, cert->getSubjectName().c_str()); + lua_setfield(L, -2, "subject_name"); + lua_pushstring(L, Certificate::getSHA1Fingerprint(cert, Sluift::globals.networkFactories.getCryptoProvider()).c_str()); + lua_setfield(L, -2, "sha1_fingerprint"); + + Lua::pushStringArray(L, cert->getCommonNames()); + lua_setfield(L, -2, "common_names"); + + Lua::pushStringArray(L, cert->getSRVNames()); + lua_setfield(L, -2, "srv_names"); + + Lua::pushStringArray(L, cert->getDNSNames()); + lua_setfield(L, -2, "dns_names"); + + Lua::pushStringArray(L, cert->getXMPPAddresses()); + lua_setfield(L, -2, "xmpp_addresses"); + + Lua::registerTableToString(L, -1); + return 1; +} + + +/******************************************************************************* * JID Functions ******************************************************************************/ @@ -334,4 +372,6 @@ SLUIFT_API int luaopen_sluift(lua_State* L) { Lua::FunctionRegistry::getInstance().createFunctionTable(L, "IDN"); lua_setfield(L, -2, "idn"); + Lua::FunctionRegistry::getInstance().createFunctionTable(L, "Crypto"); + lua_setfield(L, -2, "crypto"); #ifdef HAVE_ITUNES Lua::FunctionRegistry::getInstance().createFunctionTable(L, "iTunes"); @@ -342,5 +382,5 @@ SLUIFT_API int luaopen_sluift(lua_State* L) { lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex); std::vector<std::string> coreLibExports = boost::assign::list_of - ("tprint")("disco")("help")("get_help")("copy")("with"); + ("tprint")("disco")("help")("get_help")("copy")("with")("read_file"); foreach (const std::string& coreLibExport, coreLibExports) { lua_getfield(L, -1, coreLibExport.c_str()); |
Swift