XRootD
XrdMacaroonsUtils.cc
Go to the documentation of this file.
1 #include "XrdMacaroonsUtils.hh"
2 
3 #include <string>
4 
5 ssize_t Macaroons::determine_validity(const std::string& input)
6 {
7  ssize_t duration = 0;
8  if (input.find("PT") != 0)
9  {
10  return -1;
11  }
12  size_t pos = 2;
13  std::string remaining = input;
14  do
15  {
16  remaining = remaining.substr(pos);
17  if (remaining.size() == 0) break;
18  long cur_duration;
19  try
20  {
21  cur_duration = stol(remaining, &pos);
22  } catch (...)
23  {
24  return -1;
25  }
26  if (pos >= remaining.size())
27  {
28  return -1;
29  }
30  char unit = remaining[pos];
31  switch (unit) {
32  case 'S':
33  break;
34  case 'M':
35  cur_duration *= 60;
36  break;
37  case 'H':
38  cur_duration *= 3600;
39  break;
40  default:
41  return -1;
42  };
43  pos ++;
44  duration += cur_duration;
45  } while (1);
46  return duration;
47 }
ssize_t determine_validity(const std::string &input)