XRootD
Loading...
Searching...
No Matches
XrdMacaroonsUtils.cc
Go to the documentation of this file.
2
3#include <string>
4
5std::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
26ssize_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)