XRootD
XrdMacaroonsUtils.cc
Go to the documentation of this file.
1 #include "XrdMacaroonsUtils.hh"
2 
3 #include <string>
4 
5 std::string Macaroons::NormalizeSlashes(const std::string &input)
6 {
7  std::string output;
8  // In most cases, the output should be "about as large"
9  // as the input
10  output.reserve(input.size());
11  char prior_chr = '\0';
12  size_t output_idx = 0;
13  for (size_t idx = 0; idx < input.size(); idx++) {
14  char chr = input[idx];
15  if (prior_chr == '/' && chr == '/') {
16  output_idx++;
17  continue;
18  }
19  output += input[output_idx];
20  prior_chr = chr;
21  output_idx++;
22  }
23  return output;
24 }
25 
26 ssize_t Macaroons::determine_validity(const std::string& input)
27 {
28  ssize_t duration = 0;
29  if (input.find("PT") != 0)
30  {
31  return -1;
32  }
33  size_t pos = 2;
34  std::string remaining = input;
35  do
36  {
37  remaining = remaining.substr(pos);
38  if (remaining.size() == 0) break;
39  long cur_duration;
40  try
41  {
42  cur_duration = stol(remaining, &pos);
43  } catch (...)
44  {
45  return -1;
46  }
47  if (pos >= remaining.size())
48  {
49  return -1;
50  }
51  char unit = remaining[pos];
52  switch (unit) {
53  case 'S':
54  break;
55  case 'M':
56  cur_duration *= 60;
57  break;
58  case 'H':
59  cur_duration *= 3600;
60  break;
61  default:
62  return -1;
63  };
64  pos ++;
65  duration += cur_duration;
66  } while (1);
67  return duration;
68 }
ssize_t determine_validity(const std::string &input)
std::string NormalizeSlashes(const std::string &input)