Skip to content

Commit d5e63b3

Browse files
authored
Merge branch 'master' into feature/jsonparser
2 parents d64eed1 + 9e3dee4 commit d5e63b3

34 files changed

+586
-202
lines changed

.github/workflows/docker_trixie.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
name: Build on Debian Trixie
22

3-
on: []
3+
on: [push, pull_request]
44

55
jobs:
66
build:
7-
if: ${{ false }}
87
runs-on: ubuntu-latest
98

109
steps:

include/cgimap/api06/changeset_close_handler.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
#include "cgimap/handler.hpp"
1717
#include "cgimap/request.hpp"
1818

19+
struct RequestContext;
20+
1921
namespace api06 {
2022

2123
class changeset_close_responder : public text_responder {
@@ -24,7 +26,7 @@ class changeset_close_responder : public text_responder {
2426
data_update &,
2527
osm_changeset_id_t,
2628
const std::string &,
27-
std::optional<osm_user_id_t>);
29+
const RequestContext& req_ctx);
2830
};
2931

3032
class changeset_close_handler : public payload_enabled_handler {
@@ -36,7 +38,7 @@ class changeset_close_handler : public payload_enabled_handler {
3638

3739
responder_ptr_t responder(data_update &,
3840
const std::string &payload,
39-
std::optional<osm_user_id_t> user_id) const override;
41+
const RequestContext& req_ctx) const override;
4042
bool requires_selection_after_update() const override;
4143

4244
private:

include/cgimap/api06/changeset_create_handler.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class changeset_create_responder : public text_responder {
2323
changeset_create_responder(mime::type,
2424
data_update &,
2525
const std::string &,
26-
std::optional<osm_user_id_t>);
26+
const RequestContext& req_ctx);
2727
};
2828

2929
class changeset_create_handler : public payload_enabled_handler {
@@ -35,7 +35,7 @@ class changeset_create_handler : public payload_enabled_handler {
3535

3636
responder_ptr_t responder(data_update &,
3737
const std::string &payload,
38-
std::optional<osm_user_id_t> user_id) const override;
38+
const RequestContext& req_ctx) const override;
3939
bool requires_selection_after_update() const override;
4040
};
4141

include/cgimap/api06/changeset_update_handler.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class changeset_update_responder : public text_responder {
2525
data_update &,
2626
osm_changeset_id_t id_,
2727
const std::string & payload,
28-
std::optional<osm_user_id_t> user_id);
28+
const RequestContext& req_ctx);
2929
};
3030

3131
class changeset_update_sel_responder : public osm_current_responder {
@@ -46,7 +46,7 @@ class changeset_update_handler : public payload_enabled_handler {
4646

4747
responder_ptr_t responder(data_update &,
4848
const std::string &payload,
49-
std::optional<osm_user_id_t> user_id) const override;
49+
const RequestContext& req_ctx) const override;
5050
bool requires_selection_after_update() const override;
5151

5252
private:

include/cgimap/api06/changeset_upload/changeset_updater.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ class Changeset_Updater {
2626

2727
virtual void update_changeset(uint32_t num_new_changes, bbox_t bbox) = 0;
2828

29+
virtual bbox_t get_bbox() const = 0;
30+
2931
virtual osm_changeset_id_t api_create_changeset(const std::map<std::string, std::string>&) = 0;
3032

3133
virtual void api_update_changeset(const std::map<std::string, std::string>&) = 0;

include/cgimap/api06/changeset_upload_handler.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616
#include "cgimap/osm_diffresult_responder.hpp"
1717
#include "cgimap/request.hpp"
1818

19+
struct RequestContext;
20+
1921
namespace api06 {
2022

2123
class changeset_upload_responder : public osm_diffresult_responder {
2224
public:
2325
changeset_upload_responder(mime::type, data_update &, osm_changeset_id_t,
2426
const std::string &,
25-
std::optional<osm_user_id_t>);
27+
const RequestContext& req_ctx);
2628
};
2729

2830
class changeset_upload_handler : public payload_enabled_handler {
@@ -34,7 +36,7 @@ class changeset_upload_handler : public payload_enabled_handler {
3436

3537
responder_ptr_t responder(data_update &,
3638
const std::string &payload,
37-
std::optional<osm_user_id_t> user_id) const override;
39+
const RequestContext& req_ctx) const override;
3840
bool requires_selection_after_update() const override;
3941

4042
private:

include/cgimap/backend/apidb/changeset_upload/changeset_updater.hpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,23 @@
1717
#include "cgimap/api06/changeset_upload/osmchange_tracking.hpp"
1818
#include "cgimap/backend/apidb/transaction_manager.hpp"
1919

20+
struct RequestContext;
21+
2022
class ApiDB_Changeset_Updater : public api06::Changeset_Updater {
2123

2224
public:
2325
ApiDB_Changeset_Updater(Transaction_Manager &_m,
24-
osm_changeset_id_t _changeset,
25-
osm_user_id_t _uid);
26+
const RequestContext& _req_ctx,
27+
osm_changeset_id_t _changeset);
2628

2729
~ApiDB_Changeset_Updater() override = default;
2830

2931
void lock_current_changeset(bool check_max_elements_limit) override;
3032

3133
void update_changeset(const uint32_t num_new_changes, const bbox_t bbox) override;
3234

35+
bbox_t get_bbox() const override;
36+
3337
osm_changeset_id_t api_create_changeset(const std::map<std::string, std::string>&) override;
3438

3539
void api_update_changeset(const std::map<std::string, std::string>&) override;
@@ -46,9 +50,9 @@ class ApiDB_Changeset_Updater : public api06::Changeset_Updater {
4650
void changeset_insert_cs ();
4751

4852
Transaction_Manager &m;
53+
const RequestContext& req_ctx;
4954
uint32_t cs_num_changes{0};
5055
osm_changeset_id_t changeset;
51-
osm_user_id_t uid;
5256
bbox_t cs_bbox{};
5357
};
5458

include/cgimap/backend/apidb/changeset_upload/node_updater.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,14 @@
2020
#include <memory>
2121
#include <set>
2222

23+
struct RequestContext;
24+
2325

2426
class ApiDB_Node_Updater : public api06::Node_Updater {
2527

2628
public:
2729
ApiDB_Node_Updater(Transaction_Manager &_m,
30+
const RequestContext& req_ctx,
2831
api06::OSMChange_Tracking &ct);
2932

3033
~ApiDB_Node_Updater() override = default;
@@ -108,6 +111,7 @@ class ApiDB_Node_Updater : public api06::Node_Updater {
108111
void delete_current_node_tags(const std::vector<osm_nwr_id_t> &ids);
109112

110113
Transaction_Manager &m;
114+
const RequestContext& req_ctx;
111115
api06::OSMChange_Tracking &ct;
112116

113117
std::vector<node_t> create_nodes;

include/cgimap/backend/apidb/changeset_upload/relation_updater.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@
2121
#include <memory>
2222
#include <set>
2323

24+
struct RequestContext;
25+
2426
using RelationMemberList = std::vector<api06::RelationMember>;
2527
using TagList = std::map<std::string, std::string>;
2628

2729
class ApiDB_Relation_Updater : public api06::Relation_Updater {
2830

2931
public:
3032
ApiDB_Relation_Updater(Transaction_Manager &_m,
33+
const RequestContext& _req_ctx,
3134
api06::OSMChange_Tracking &ct);
3235

3336
~ApiDB_Relation_Updater() override = default;
@@ -175,6 +178,7 @@ class ApiDB_Relation_Updater : public api06::Relation_Updater {
175178
const std::set<osm_nwr_id_t> &direct_relation_ids);
176179

177180
Transaction_Manager &m;
181+
const RequestContext& req_ctx;
178182
api06::OSMChange_Tracking &ct;
179183

180184
std::vector<relation_t> create_relations;

include/cgimap/backend/apidb/changeset_upload/way_updater.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#include <memory>
2222
#include <set>
2323

24+
struct RequestContext;
25+
2426
/* Way operations
2527
*
2628
*/
@@ -29,6 +31,7 @@ class ApiDB_Way_Updater : public api06::Way_Updater {
2931

3032
public:
3133
ApiDB_Way_Updater(Transaction_Manager &_m,
34+
const RequestContext& _req_ctx,
3235
api06::OSMChange_Tracking &ct);
3336

3437
~ApiDB_Way_Updater() override = default;
@@ -130,6 +133,7 @@ class ApiDB_Way_Updater : public api06::Way_Updater {
130133
void delete_current_way_nodes(std::vector<osm_nwr_id_t> ids);
131134

132135
Transaction_Manager &m;
136+
const RequestContext& req_ctx;
133137
api06::OSMChange_Tracking &ct;
134138

135139
std::vector<way_t> create_ways;

include/cgimap/backend/apidb/pgsql_update.hpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
#include <pqxx/pqxx>
1919
#include <boost/program_options.hpp>
2020

21+
struct RequestContext;
22+
2123
class pgsql_update : public data_update {
2224

2325
public:
@@ -26,23 +28,25 @@ class pgsql_update : public data_update {
2628
~pgsql_update() override = default;
2729

2830
std::unique_ptr<api06::Changeset_Updater>
29-
get_changeset_updater(osm_changeset_id_t _changeset, osm_user_id_t _uid) override;
31+
get_changeset_updater(const RequestContext& ctx, osm_changeset_id_t _changeset) override;
3032

3133
std::unique_ptr<api06::Node_Updater>
32-
get_node_updater(api06::OSMChange_Tracking &ct) override;
34+
get_node_updater(const RequestContext& ctx, api06::OSMChange_Tracking &ct) override;
3335

3436
std::unique_ptr<api06::Way_Updater>
35-
get_way_updater(api06::OSMChange_Tracking &ct) override;
37+
get_way_updater(const RequestContext& ctx, api06::OSMChange_Tracking &ct) override;
3638

3739
std::unique_ptr<api06::Relation_Updater>
38-
get_relation_updater(api06::OSMChange_Tracking &ct) override;
40+
get_relation_updater(const RequestContext& ctx, api06::OSMChange_Tracking &ct) override;
3941

4042
void commit() override;
4143

4244
bool is_api_write_disabled() const override;
4345

4446
uint32_t get_rate_limit(osm_user_id_t uid) override;
4547

48+
uint64_t get_bbox_size_limit(osm_user_id_t uid) override;
49+
4650
/**
4751
* abstracts the creation of transactions for the
4852
* data updates.

include/cgimap/data_update.hpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
#include <memory>
2525
#include <vector>
2626

27+
struct RequestContext;
28+
2729
class data_update {
2830
public:
2931
data_update() = default;
@@ -37,16 +39,16 @@ class data_update {
3739
data_update& operator=(data_update&&) = delete;
3840

3941
virtual std::unique_ptr<api06::Changeset_Updater>
40-
get_changeset_updater(osm_changeset_id_t _changeset, osm_user_id_t _uid) = 0;
42+
get_changeset_updater(const RequestContext& ctx, osm_changeset_id_t _changeset) = 0;
4143

4244
virtual std::unique_ptr<api06::Node_Updater>
43-
get_node_updater(api06::OSMChange_Tracking &ct) = 0;
45+
get_node_updater(const RequestContext& ctx, api06::OSMChange_Tracking &ct) = 0;
4446

4547
virtual std::unique_ptr<api06::Way_Updater>
46-
get_way_updater(api06::OSMChange_Tracking &ct) = 0;
48+
get_way_updater(const RequestContext& ctx, api06::OSMChange_Tracking &ct) = 0;
4749

4850
virtual std::unique_ptr<api06::Relation_Updater>
49-
get_relation_updater(api06::OSMChange_Tracking &ct) = 0;
51+
get_relation_updater(const RequestContext& ctx, api06::OSMChange_Tracking &ct) = 0;
5052

5153
virtual void
5254
commit() = 0;
@@ -56,6 +58,9 @@ class data_update {
5658
// get the current rate limit for changeset uploads for a given user id
5759
virtual uint32_t get_rate_limit(osm_user_id_t) = 0;
5860

61+
// get the current maximum bounding box size for a given user id
62+
virtual uint64_t get_bbox_size_limit(osm_user_id_t uid) = 0;
63+
5964
/**
6065
* factory for the creation of data updates. this abstracts away
6166
* the creation process of transactions, and allows some up-front

include/cgimap/handler.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class payload_enabled_handler : public handler {
9696
// Responder used to update the database
9797
virtual responder_ptr_t responder(data_update &,
9898
const std::string & payload,
99-
std::optional<osm_user_id_t> user_id) const = 0;
99+
const RequestContext& req_ctx) const = 0;
100100

101101
// Optional responder to return XML response back to caller of the API method
102102
responder_ptr_t responder(data_selection &) const override = 0;

include/cgimap/options.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class global_settings_base {
3535
virtual uint32_t get_ratelimiter_ratelimit(bool) const = 0;
3636
virtual uint32_t get_ratelimiter_maxdebt(bool) const = 0;
3737
virtual bool get_ratelimiter_upload() const = 0;
38+
virtual bool get_bbox_size_limiter_upload() const = 0;
3839
};
3940

4041
class global_settings_default : public global_settings_base {
@@ -97,6 +98,10 @@ class global_settings_default : public global_settings_base {
9798
bool get_ratelimiter_upload() const override {
9899
return false;
99100
}
101+
102+
bool get_bbox_size_limiter_upload() const override {
103+
return false;
104+
}
100105
};
101106

102107
class global_settings_via_options : public global_settings_base {
@@ -175,6 +180,10 @@ class global_settings_via_options : public global_settings_base {
175180
return m_ratelimiter_upload;
176181
}
177182

183+
bool get_bbox_size_limiter_upload() const override {
184+
return m_bbox_size_limiter_upload;
185+
}
186+
178187
private:
179188
void init_fallback_values(const global_settings_base &def);
180189
void set_new_options(const po::variables_map &options);
@@ -191,6 +200,7 @@ class global_settings_via_options : public global_settings_base {
191200
void set_ratelimiter_ratelimit(const po::variables_map &options);
192201
void set_ratelimiter_maxdebt(const po::variables_map &options);
193202
void set_ratelimiter_upload(const po::variables_map &options);
203+
void set_bbox_size_limiter_upload(const po::variables_map &options);
194204
bool validate_timeout(const std::string &timeout) const;
195205

196206
uint32_t m_payload_max_size;
@@ -208,6 +218,7 @@ class global_settings_via_options : public global_settings_base {
208218
uint32_t m_ratelimiter_maxdebt;
209219
uint32_t m_moderator_ratelimiter_maxdebt;
210220
bool m_ratelimiter_upload;
221+
bool m_bbox_size_limiter_upload;
211222
};
212223

213224
class global_settings final {
@@ -256,6 +267,9 @@ class global_settings final {
256267
// Use ratelimiter for changeset uploads
257268
static bool get_ratelimiter_upload() { return settings->get_ratelimiter_upload(); }
258269

270+
// Use bbox size limiter for changeset uploads
271+
static bool get_bbox_size_limiter_upload() { return settings->get_bbox_size_limiter_upload(); }
272+
259273
private:
260274
static std::unique_ptr<global_settings_base> settings; // gets initialized with global_settings_default instance
261275
};

0 commit comments

Comments
 (0)