Serenity Operating System
1/*
2 * Copyright (c) 2020, Tom Lebreux <tomlebreux@hotmail.com>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <AK/Base64.h>
8#include <LibCore/ArgsParser.h>
9#include <LibCore/File.h>
10#include <LibCore/System.h>
11#include <LibMain/Main.h>
12
13ErrorOr<int> serenity_main(Main::Arguments arguments)
14{
15 TRY(Core::System::pledge("stdio rpath"));
16
17 bool decode = false;
18 StringView filepath = {};
19
20 Core::ArgsParser args_parser;
21 args_parser.add_option(decode, "Decode data", "decode", 'd');
22 args_parser.add_positional_argument(filepath, "", "file", Core::ArgsParser::Required::No);
23 args_parser.parse(arguments);
24
25 auto file = TRY(Core::File::open_file_or_standard_stream(filepath, Core::File::OpenMode::Read));
26 ByteBuffer buffer = TRY(file->read_until_eof());
27
28 TRY(Core::System::pledge("stdio"));
29
30 if (decode) {
31 auto decoded = TRY(decode_base64(buffer));
32 out("{}", StringView(decoded.bytes()));
33 return 0;
34 }
35
36 auto encoded = TRY(encode_base64(buffer));
37 outln("{}", encoded);
38 return 0;
39}