YugabyteDB (2.13.0.0-b42, bfc6a6643e7399ac8a0e81d06a3ee6d6571b33ab)

Coverage Report

Created: 2022-03-09 17:30

/Users/deen/code/yugabyte-db/src/yb/util/web_callback_registry.h
Line
Count
Source
1
// Licensed to the Apache Software Foundation (ASF) under one
2
// or more contributor license agreements.  See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership.  The ASF licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License.  You may obtain a copy of the License at
8
//
9
//   http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied.  See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
//
18
// The following only applies to changes made to this file as part of YugaByte development.
19
//
20
// Portions Copyright (c) YugaByte, Inc.
21
//
22
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
23
// in compliance with the License.  You may obtain a copy of the License at
24
//
25
// http://www.apache.org/licenses/LICENSE-2.0
26
//
27
// Unless required by applicable law or agreed to in writing, software distributed under the License
28
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
29
// or implied.  See the License for the specific language governing permissions and limitations
30
// under the License.
31
//
32
#ifndef YB_UTIL_WEB_CALLBACK_REGISTRY_H
33
#define YB_UTIL_WEB_CALLBACK_REGISTRY_H
34
35
#include <functional>
36
#include <map>
37
#include <sstream>
38
39
namespace yb {
40
41
// Interface for registering webserver callbacks.
42
class WebCallbackRegistry {
43
 public:
44
  typedef std::map<std::string, std::string> ArgumentMap;
45
46
  struct WebRequest {
47
    // The query string, parsed into key/value argument pairs.
48
    ArgumentMap parsed_args;
49
50
    // The raw query string passed in the URL. May be empty.
51
    std::string query_string;
52
53
    // The method (POST/GET/etc).
54
    std::string request_method;
55
56
    // In the case of a POST, the posted data.
57
    std::string post_data;
58
59
    // The URI where we were pointing, for potential redirects.
60
    std::string redirect_uri;
61
  };
62
63
  struct WebResponse {
64
    // The output stream.
65
    std::stringstream output;
66
67
    // Response code for HTTP requests.
68
    int code;
69
  };
70
71
  typedef std::function<void(const WebRequest& args, WebResponse* resp)>
72
      PathHandlerCallback;
73
74
212
  virtual ~WebCallbackRegistry() {}
75
76
  // Register a callback for a URL path. Path should not include the
77
  // http://hostname/ prefix. If is_styled is true, the page is meant to be for
78
  // people to look at and is styled.  If false, it is meant to be for machines to
79
  // scrape.  If is_on_nav_bar is true,  a link to this page is
80
  // printed in the navigation bar at the top of each debug page. Otherwise the
81
  // link does not appear, and the page is rendered without HTML headers and
82
  // footers.
83
  // The first registration's choice of is_styled overrides all
84
  // subsequent registrations for that URL.
85
  virtual void RegisterPathHandler(const std::string& path, const std::string& alias,
86
                                   const PathHandlerCallback& callback,
87
                                   bool is_styled = true, bool is_on_nav_bar = true,
88
                                   const std::string icon = "") = 0;
89
};
90
91
} // namespace yb
92
93
#endif /* YB_UTIL_WEB_CALLBACK_REGISTRY_H */