浏览代码

add base64 code to cli

Missingmew 5 年之前
父节点
当前提交
7f6a2b6f22
共有 3 个文件被更改,包括 50 次插入1 次删除
  1. 1 1
      cli/CMakeLists.txt
  2. 26 0
      cli/include/base64.hpp
  3. 23 0
      cli/src/base64.cpp

+ 1 - 1
cli/CMakeLists.txt

@@ -5,7 +5,7 @@ set (CMAKE_BUILD_TYPE debug)
 
 project(ccats-cli)
 
-add_executable(ccats-cli src/main.cpp src/iomanager.cpp src/machineiomanager.cpp src/useriomanager.cpp src/commands.cpp)
+add_executable(ccats-cli src/main.cpp src/iomanager.cpp src/machineiomanager.cpp src/useriomanager.cpp src/commands.cpp src/base64.cpp)
 
 # use pkg-config to find readline as it doesnt provide cmake files
 find_package(PkgConfig REQUIRED)

+ 26 - 0
cli/include/base64.hpp

@@ -0,0 +1,26 @@
+#ifndef BASE64_H
+#define BASE64_H
+
+#include <string>
+
+namespace base64 {
+/**
+ * Decodes base64 encoded strings.
+ *
+ * @param val base64 encoded string
+ *
+ * @return normal string
+ */
+std::string decode(const std::string &val);
+
+/**
+ * Encodes base64 encoded strings.
+ *
+ * @param val normal string
+ *
+ * @return base64 encoded string
+ */
+std::string encode(const std::string &val);
+} // namespace base64
+
+#endif

+ 23 - 0
cli/src/base64.cpp

@@ -0,0 +1,23 @@
+#include "../include/base64.hpp"
+
+#include <boost/algorithm/string.hpp>
+#include <boost/archive/iterators/base64_from_binary.hpp>
+#include <boost/archive/iterators/binary_from_base64.hpp>
+#include <boost/archive/iterators/transform_width.hpp>
+
+std::string base64::decode(const std::string &val) {
+  using namespace boost::archive::iterators;
+  using It =
+      transform_width<binary_from_base64<std::string::const_iterator>, 8, 6>;
+  return boost::algorithm::trim_right_copy_if(
+      std::string(It(std::begin(val)), It(std::end(val))),
+      [](char c) { return c == '\0'; });
+}
+
+std::string base64::encode(const std::string &val) {
+  using namespace boost::archive::iterators;
+  using It =
+      base64_from_binary<transform_width<std::string::const_iterator, 6, 8>>;
+  auto tmp = std::string(It(std::begin(val)), It(std::end(val)));
+  return tmp.append((3 - val.size() % 3) % 3, '=');
+}