28 {
29 static std::string cached;
30 static bool loaded = false;
31 if (loaded) return cached;
32 loaded = true;
33
34 std::ifstream f("/usr/share/BastionGuard/data/logo.png", std::ios::binary);
35 if (!f) return cached;
36
37 std::ostringstream ss;
38 ss << f.rdbuf();
39 const std::string raw = ss.str();
40 if (raw.empty()) return cached;
41
42 static constexpr char b64[] =
43 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
44 std::string out;
45 out.reserve(((raw.size() + 2) / 3) * 4);
46 for (std::size_t i = 0; i < raw.size(); i += 3) {
47 const unsigned char a = static_cast<unsigned char>(raw[i]);
48 const unsigned char b = (i+1 < raw.size()) ? static_cast<unsigned char>(raw[i+1]) : 0;
49 const unsigned char c = (i+2 < raw.size()) ? static_cast<unsigned char>(raw[i+2]) : 0;
50 out += b64[(a >> 2) & 0x3F];
51 out += b64[((a << 4) | (b >> 4)) & 0x3F];
52 out += (i+1 < raw.size()) ? b64[((b << 2) | (c >> 6)) & 0x3F] : '=';
53 out += (i+2 < raw.size()) ? b64[c & 0x3F] : '=';
54 }
55 cached = "data:image/png;base64," + out;
56 return cached;
57}