X-Git-Url: https://www.tinc-vpn.org/git/browse?a=blobdiff_plain;ds=sidebyside;f=lib%2Futility.h;fp=lib%2Futility.h;h=7ad7ab1474ab9fb6a456e0051337c086cddb655f;hb=401e0b5e1d97ded0e2c7415c6dd0f94ee6bfb470;hp=0000000000000000000000000000000000000000;hpb=0f3083b8693bfaddc4bf3fd6ce7174ac06afa958;p=fides diff --git a/lib/utility.h b/lib/utility.h new file mode 100644 index 0000000..7ad7ab1 --- /dev/null +++ b/lib/utility.h @@ -0,0 +1,83 @@ +/* fides.h - Light-weight, decentralised trust and authorisation management + Copyright (C) 2008-2009 Guus Sliepen + + Fides is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + Fides is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, see . +*/ + +#ifndef __FIDES_UTILITY_H__ +#define __FIDES_UTILITY_H__ + +#include +#include +#include +#include + +namespace fides { + class regexp { + regex_t comp; + + public: + static const int EXTENDED = REG_EXTENDED; + static const int ICASE = REG_ICASE; + static const int NOSUB = REG_NOSUB; + static const int NEWLINE = REG_NEWLINE; + + static const int NOTBOL = REG_NOTBOL; + static const int NOTEOL = REG_NOTEOL; + + /// Construct a compiled regular expression. + /// + /// @param exp Regular expression to compile. + /// @param cflags Bitwise OR of options to apply when compiling the regular expression: + /// - fides::regexp::EXTENDED + /// Use POSIX Extended Regular Expression syntax when interpreting exp. + /// - fides::regexp::ICASE + /// Make the expression case-insensitive. + /// - fides::regexp::NOSUB + /// Disable support for substring addressing. + /// - fides::regexp::NEWLINE + /// Do not treat the newline character as the start or end of a line. + regexp(const std::string &exp, int cflags = 0) { + int err = regcomp(&comp, exp.c_str(), cflags); + if(err) + throw std::runtime_error("Could not compile regular expression"); + } + + ~regexp() { + regfree(&comp); + } + + /// Test whether a string matches the regular expression. + /// + /// @param in String to test. + /// @param eflags Bitwise OR of options to apply when matching the string: + /// - fides::regexp::NOTBOL + /// Do not treat the start of the string as the start of a line. + /// - fides::regexp::NOTEOL + /// Do not treat the end of the string as the end of a line. + /// @return True if the string matches the regular expression, false otherwise. + bool match(const std::string &in, int eflags = 0) { + return regexec(&comp, in.c_str(), 0, 0, eflags) == 0; + } + }; + + std::string b64encode(const std::string &in); + std::string b64decode(const std::string &in); + std::string hexencode(const std::string &in); + std::string hexdecode(const std::string &in); + + std::vector dirlist(const std::string &path); +} + +#endif