aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/string.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zencore/string.cpp')
-rw-r--r--src/zencore/string.cpp56
1 files changed, 47 insertions, 9 deletions
diff --git a/src/zencore/string.cpp b/src/zencore/string.cpp
index 27635a86c..3d0451e27 100644
--- a/src/zencore/string.cpp
+++ b/src/zencore/string.cpp
@@ -539,10 +539,33 @@ UrlDecode(std::string_view InUrl)
return std::string(Url.ToView());
}
-//////////////////////////////////////////////////////////////////////////
-//
-// Unit tests
-//
+std::string
+HideSensitiveString(std::string_view String)
+{
+ const size_t Length = String.length();
+ const size_t SourceLength = Length > 16 ? 4 : 0;
+ const size_t PadLength = Min(Length - SourceLength, 4u);
+ const bool AddEllipsis = (SourceLength + PadLength) < Length;
+ StringBuilder<16> SB;
+ if (SourceLength > 0)
+ {
+ SB << String.substr(0, SourceLength);
+ }
+ if (PadLength > 0)
+ {
+ SB << std::string(PadLength, 'X');
+ }
+ if (AddEllipsis)
+ {
+ SB << "...";
+ }
+ return SB.ToString();
+};
+
+ //////////////////////////////////////////////////////////////////////////
+ //
+ // Unit tests
+ //
#if ZEN_WITH_TESTS
@@ -814,11 +837,6 @@ TEST_CASE("niceNum")
}
}
-void
-string_forcelink()
-{
-}
-
TEST_CASE("StringBuilder")
{
StringBuilder<64> sb;
@@ -1224,8 +1242,28 @@ TEST_CASE("string")
}
}
+TEST_CASE("hidesensitivestring")
+{
+ using namespace std::literals;
+
+ CHECK_EQ(HideSensitiveString(""sv), ""sv);
+ CHECK_EQ(HideSensitiveString("A"sv), "X"sv);
+ CHECK_EQ(HideSensitiveString("ABCD"sv), "XXXX"sv);
+ CHECK_EQ(HideSensitiveString("ABCDE"sv), "XXXX..."sv);
+ CHECK_EQ(HideSensitiveString("ABCDEFGH"sv), "XXXX..."sv);
+ CHECK_EQ(HideSensitiveString("ABCDEFGHIJKLMNOP"sv), "XXXX..."sv);
+ CHECK_EQ(HideSensitiveString("ABCDEFGHIJKLMNOPQ"sv), "ABCDXXXX..."sv);
+ CHECK_EQ(HideSensitiveString("ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"sv), "ABCDXXXX..."sv);
+ CHECK_EQ(HideSensitiveString("1234567890123456789"sv), "1234XXXX..."sv);
+}
+
TEST_SUITE_END();
+void
+string_forcelink()
+{
+}
+
#endif
} // namespace zen