| 217 | } |
| 218 | |
| 219 | Status GetXFFOriginClientAddress(const std::string_view& xff_addresses, |
| 220 | std::string& origin) { |
| 221 | if (xff_addresses.empty()) { |
| 222 | return Status::Expected("Empty XFF header"); |
| 223 | } |
| 224 | const int pos = xff_addresses.find_first_of(','); |
| 225 | if (pos == xff_addresses.npos) { |
| 226 | origin = xff_addresses; |
| 227 | } else { |
| 228 | origin = xff_addresses.substr(0, pos); |
| 229 | } |
| 230 | StripWhiteSpace(&origin); |
| 231 | if (origin.empty()) { |
| 232 | return Status::Expected("Empty XFF header"); |
| 233 | } |
| 234 | return Status::OK(); |
| 235 | } |
| 236 | |
| 237 | Status BasicAuthExtractCredentials( |
| 238 | const string& token, string& username, string& password) { |