Skip to content
This repository was archived by the owner on May 16, 2019. It is now read-only.

Commit 7ca19df

Browse files
author
Tom Galloway
committed
Merge remote-tracking branch 'upstream/master'
2 parents 60f212e + 80622e5 commit 7ca19df

23 files changed

+1493
-1204
lines changed

.github/ISSUE_TEMPLATE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
Brief Description:
2+
3+
Operating System (OS and version):
4+
OpenBazaar version:
5+
Hardware:
6+
7+
Reproducible (Always / Almost Always / Sometimes / Rarely / Couldn't Reproduce):
8+
9+
10+
Steps to reproduce:
11+
1.
12+
2.
13+
3.
14+
15+
Observed Behavior:
16+
17+
18+
Expected Behavior:
19+
20+
21+
Additional info (links, images, etc go here):

api/restapi.py

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ def _setContentDispositionAndSend(file_path, extension, content_type):
125125
request.finish()
126126

127127
if "hash" in request.args and len(request.args["hash"][0]) == 40:
128-
if self.db.HashMap().get_file(request.args["hash"][0]) is not None:
129-
image_path = self.db.HashMap().get_file(request.args["hash"][0])
128+
if self.db.filemap.get_file(request.args["hash"][0]) is not None:
129+
image_path = self.db.filemap.get_file(request.args["hash"][0])
130130
else:
131131
image_path = DATA_FOLDER + "cache/" + request.args["hash"][0]
132132
if not os.path.exists(image_path) and "guid" in request.args:
@@ -208,7 +208,7 @@ def get_node(node):
208208
request.write(json.dumps({}))
209209
request.finish()
210210
else:
211-
temp_handle = self.db.ProfileStore().get_temp_handle()
211+
temp_handle = self.db.profile.get_temp_handle()
212212
parse_profile(p, None if temp_handle == "" else temp_handle)
213213
return server.NOT_DONE_YET
214214

@@ -249,7 +249,7 @@ def get_node(node):
249249
request.finish()
250250
self.kserver.resolve(unhexlify(request.args["guid"][0])).addCallback(get_node)
251251
else:
252-
ser = self.db.ListingsStore().get_proto()
252+
ser = self.db.listings.get_proto()
253253
if ser is not None:
254254
l = objects.Listings()
255255
l.ParseFromString(ser)
@@ -289,7 +289,7 @@ def get_node(node):
289289
request.finish()
290290
self.kserver.resolve(unhexlify(request.args["guid"][0])).addCallback(get_node)
291291
else:
292-
ser = self.db.FollowData().get_followers()
292+
ser = self.db.follow.get_followers()
293293
if ser is not None:
294294
f = objects.Followers()
295295
f.ParseFromString(ser)
@@ -330,7 +330,7 @@ def get_node(node):
330330
request.finish()
331331
self.kserver.resolve(unhexlify(request.args["guid"][0])).addCallback(get_node)
332332
else:
333-
ser = self.db.FollowData().get_following()
333+
ser = self.db.follow.get_following()
334334
if ser is not None:
335335
f = objects.Following()
336336
f.ParseFromString(ser)
@@ -396,10 +396,10 @@ def update_profile(self, request):
396396
if "handle" in request.args:
397397
if blockchainid.validate(request.args["handle"][0], self.keychain.guid.encode("hex")):
398398
u.handle = request.args["handle"][0]
399-
p.db.set_temp_handle("")
399+
self.db.profile.set_temp_handle("")
400400
else:
401401
u.handle = ""
402-
p.db.set_temp_handle(request.args["handle"][0])
402+
self.db.profile.set_temp_handle(request.args["handle"][0])
403403
if "about" in request.args:
404404
u.about = request.args["about"][0]
405405
if "short_description" in request.args:
@@ -503,7 +503,7 @@ def get_node(node):
503503
self.kserver.resolve(unhexlify(request.args["guid"][0])).addCallback(get_node)
504504
else:
505505
try:
506-
with open(self.db.HashMap().get_file(request.args["id"][0]), "r") as filename:
506+
with open(self.db.filemap.get_file(request.args["id"][0]), "r") as filename:
507507
contract = json.loads(filename.read(), object_pairs_hook=OrderedDict)
508508
parse_contract(contract)
509509
except Exception:
@@ -573,13 +573,15 @@ def set_contract(self, request):
573573
def delete_contract(self, request):
574574
try:
575575
if "id" in request.args:
576-
file_path = self.db.HashMap().get_file(request.args["id"][0])
576+
file_path = self.db.filemap.get_file(request.args["id"][0])
577577
with open(file_path, 'r') as filename:
578578
contract = json.load(filename, object_pairs_hook=OrderedDict)
579579
c = Contract(self.db, contract=contract)
580580
if "keywords" in c.contract["vendor_offer"]["listing"]["item"]:
581581
for keyword in c.contract["vendor_offer"]["listing"]["item"]["keywords"]:
582582
if keyword != "":
583+
if isinstance(keyword, unicode):
584+
keyword = keyword.encode('utf8')
583585
self.kserver.delete(keyword.lower(), unhexlify(c.get_contract_id()),
584586
self.keychain.signing_key.sign(
585587
unhexlify(c.get_contract_id()))[:64])
@@ -606,9 +608,8 @@ def shutdown(self, request):
606608
request.finish()
607609
return server.NOT_DONE_YET
608610
else:
609-
vendor_store = self.db.VendorStore()
610611
for vendor in self.protocol.vendors.values():
611-
vendor_store.save_vendor(vendor.id.encode("hex"), vendor.getProto().SerializeToString())
612+
self.db.vendors.save_vendor(vendor.id.encode("hex"), vendor.getProto().SerializeToString())
612613
PortMapper().clean_my_mappings(self.kserver.node.port)
613614
self.protocol.shutdown()
614615
reactor.stop()
@@ -732,21 +733,21 @@ def upload_image(self, request):
732733
hash_value = digest(img).encode("hex")
733734
with open(DATA_FOLDER + "store/media/" + hash_value, 'wb') as outfile:
734735
outfile.write(img)
735-
self.db.HashMap().insert(hash_value, DATA_FOLDER + "store/media/" + hash_value)
736+
self.db.filemap.insert(hash_value, DATA_FOLDER + "store/media/" + hash_value)
736737
ret.append(hash_value)
737738
elif "avatar" in request.args:
738739
avi = request.args["avatar"][0].decode("base64")
739740
hash_value = digest(avi).encode("hex")
740741
with open(DATA_FOLDER + "store/avatar", 'wb') as outfile:
741742
outfile.write(avi)
742-
self.db.HashMap().insert(hash_value, DATA_FOLDER + "store/avatar")
743+
self.db.filemap.insert(hash_value, DATA_FOLDER + "store/avatar")
743744
ret.append(hash_value)
744745
elif "header" in request.args:
745746
hdr = request.args["header"][0].decode("base64")
746747
hash_value = digest(hdr).encode("hex")
747748
with open(DATA_FOLDER + "store/header", 'wb') as outfile:
748749
outfile.write(hdr)
749-
self.db.HashMap().insert(hash_value, DATA_FOLDER + "store/header")
750+
self.db.filemap.insert(hash_value, DATA_FOLDER + "store/header")
750751
ret.append(hash_value)
751752
request.write(json.dumps({"success": True, "image_hashes": ret}, indent=4))
752753
request.finish()
@@ -788,7 +789,7 @@ def respond(success):
788789
@authenticated
789790
def set_settings(self, request):
790791
try:
791-
settings = self.db.Settings()
792+
settings = self.db.settings
792793
resolver = RESOLVER if "resolver" not in request.args or request.args["resolver"][0] == "" \
793794
else request.args["resolver"][0]
794795
if self.protocol.testnet:
@@ -829,7 +830,7 @@ def set_settings(self, request):
829830
@GET('^/api/v1/settings')
830831
@authenticated
831832
def get_settings(self, request):
832-
settings = self.db.Settings().get()
833+
settings = self.db.settings.get()
833834
if settings is None:
834835
request.write(json.dumps({}, indent=4))
835836
request.finish()
@@ -859,10 +860,9 @@ def get_settings(self, request):
859860
"network_connection": nat_type
860861
}
861862
mods = []
862-
mods_db = self.db.ModeratorStore()
863863
try:
864864
for guid in json.loads(settings[11]):
865-
info = mods_db.get_moderator(guid)
865+
info = self.db.moderators.get_moderator(guid)
866866
if info is not None:
867867
m = {
868868
"guid": guid,
@@ -911,7 +911,7 @@ def get_routing_table(self, request):
911911
@GET('^/api/v1/get_notifications')
912912
@authenticated
913913
def get_notifications(self, request):
914-
notifications = self.db.NotificationStore().get_notifications()
914+
notifications = self.db.notifications.get_notifications()
915915
limit = int(request.args["limit"][0]) if "limit" in request.args else len(notifications)
916916
notification_list = []
917917
for n in notifications[len(notifications) - limit:]:
@@ -937,7 +937,7 @@ def get_notifications(self, request):
937937
def mark_notification_as_read(self, request):
938938
try:
939939
for notif_id in request.args["id"]:
940-
self.db.NotificationStore().mark_as_read(notif_id)
940+
self.db.notifications.mark_as_read(notif_id)
941941
request.write(json.dumps({"success": True}, indent=4))
942942
request.finish()
943943
return server.NOT_DONE_YET
@@ -963,7 +963,7 @@ def get_response(num):
963963
@GET('^/api/v1/get_chat_messages')
964964
@authenticated
965965
def get_chat_messages(self, request):
966-
messages = self.db.MessageStore().get_messages(request.args["guid"][0], "CHAT")
966+
messages = self.db.messages.get_messages(request.args["guid"][0], "CHAT")
967967
limit = int(request.args["limit"][0]) if "limit" in request.args else len(messages)
968968
start = int(request.args["start"][0]) if "start" in request.args else 0
969969
message_list = []
@@ -986,7 +986,7 @@ def get_chat_messages(self, request):
986986
@GET('^/api/v1/get_chat_conversations')
987987
@authenticated
988988
def get_chat_conversations(self, request):
989-
messages = self.db.MessageStore().get_conversations()
989+
messages = self.db.messages.get_conversations()
990990
request.setHeader('content-type', "application/json")
991991
request.write(str(bleach.clean(json.dumps(messages, indent=4), tags=ALLOWED_TAGS)))
992992
request.finish()
@@ -996,7 +996,7 @@ def get_chat_conversations(self, request):
996996
@authenticated
997997
def mark_chat_message_as_read(self, request):
998998
try:
999-
self.db.MessageStore().mark_as_read(request.args["guid"][0])
999+
self.db.messages.mark_as_read(request.args["guid"][0])
10001000
request.write(json.dumps({"success": True}, indent=4))
10011001
request.finish()
10021002
return server.NOT_DONE_YET
@@ -1008,7 +1008,7 @@ def mark_chat_message_as_read(self, request):
10081008
@GET('^/api/v1/get_sales')
10091009
@authenticated
10101010
def get_sales(self, request):
1011-
sales = self.db.Sales().get_all()
1011+
sales = self.db.sales.get_all()
10121012
sales_list = []
10131013
for sale in sales:
10141014
sale_json = {
@@ -1031,7 +1031,7 @@ def get_sales(self, request):
10311031
@GET('^/api/v1/get_purchases')
10321032
@authenticated
10331033
def get_purchases(self, request):
1034-
purchases = self.db.Purchases().get_all()
1034+
purchases = self.db.purchases.get_all()
10351035
purchases_list = []
10361036
for purchase in purchases:
10371037
purchase_json = {
@@ -1210,7 +1210,7 @@ def release_funds(self, request):
12101210
@GET('^/api/v1/get_cases')
12111211
@authenticated
12121212
def get_cases(self, request):
1213-
cases = self.db.Cases().get_all()
1213+
cases = self.db.cases.get_all()
12141214
cases_list = []
12151215
for case in cases:
12161216
purchase_json = {
@@ -1235,7 +1235,7 @@ def get_cases(self, request):
12351235
@authenticated
12361236
def order_messages(self, request):
12371237
message_list = []
1238-
messages = self.db.MessageStore().get_order_messages(request.args["order_id"][0])
1238+
messages = self.db.messages.get_order_messages(request.args["order_id"][0])
12391239
for m in messages:
12401240
if m[0] is not None:
12411241
message_json = {
@@ -1279,10 +1279,10 @@ def get_node(node):
12791279
else:
12801280
ratings = []
12811281
if "contract_id" in request.args and request.args["contract_id"][0] != "":
1282-
for rating in self.db.Ratings().get_listing_ratings(request.args["contract_id"][0]):
1282+
for rating in self.db.ratings.get_listing_ratings(request.args["contract_id"][0]):
12831283
ratings.append(json.loads(rating[0]))
12841284
else:
1285-
for rating in self.db.Ratings().get_all_ratings():
1285+
for rating in self.db.ratings.get_all_ratings():
12861286
ratings.append(json.loads(rating[0]))
12871287
request.setHeader('content-type', "application/json")
12881288
request.write(str(bleach.clean(json.dumps(ratings, indent=4), tags=ALLOWED_TAGS)))

api/ws.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,18 +78,19 @@ def handle_response(metadata, node):
7878
self.factory.mserver.get_user_metadata(node).addCallback(handle_response, node)
7979

8080
def get_moderators(self, message_id):
81-
m = self.factory.db.ModeratorStore()
8281

8382
def parse_response(moderators):
8483
if moderators is not None:
85-
m.clear_all()
84+
self.factory.db.moderators.clear_all()
8685

8786
def parse_profile(profile, node):
8887
if profile is not None:
8988
# TODO: should check signatures here before entering in database
90-
m.save_moderator(node.id.encode("hex"), node.pubkey, profile.bitcoin_key.public_key,
91-
profile.bitcoin_key.signature, profile.name, profile.avatar_hash,
92-
profile.moderation_fee, profile.handle, profile.short_description)
89+
self.factory.db.moderators.save_moderator(node.id.encode("hex"), node.pubkey,
90+
profile.bitcoin_key.public_key,
91+
profile.bitcoin_key.signature, profile.name,
92+
profile.avatar_hash, profile.moderation_fee,
93+
profile.handle, profile.short_description)
9394
moderator = {
9495
"id": message_id,
9596
"moderator":
@@ -105,7 +106,7 @@ def parse_profile(profile, node):
105106
}
106107
self.transport.write(str(bleach.clean(json.dumps(moderator, indent=4), tags=ALLOWED_TAGS)))
107108
else:
108-
m.delete_moderator(node.id)
109+
self.factory.db.moderators.delete_moderator(node.id)
109110
for mod in moderators:
110111
try:
111112
val = objects.Value()
@@ -184,9 +185,9 @@ def send_message(self, message_id, guid, handle, message, subject, message_type,
184185

185186
enc_key = nacl.signing.VerifyKey(unhexlify(recipient_key)).to_curve25519_public_key().encode()
186187

187-
self.factory.db.MessageStore().save_message(guid, handle, unhexlify(recipient_key), subject,
188-
message_type.upper(), message, time.time(), "", "", True,
189-
message_id)
188+
self.factory.db.messages.save_message(guid, handle, unhexlify(recipient_key), subject,
189+
message_type.upper(), message, time.time(), "", "", True,
190+
message_id)
190191

191192
def send(node_to_send):
192193
n = node_to_send if node_to_send is not None else Node(unhexlify(guid))
@@ -234,7 +235,7 @@ def parse_results(values):
234235
(n.relayAddress.ip, n.relayAddress.port),
235236
n.natType, n.vendor)
236237
if n.guid == KeyChain(self.factory.db).guid:
237-
proto = self.factory.db.ListingsStore().get_proto()
238+
proto = self.factory.db.listings.get_proto()
238239
l = Listings()
239240
l.ParseFromString(proto)
240241
for listing in l.listing:

config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from ConfigParser import ConfigParser
1313
from urlparse import urlparse
1414

15-
PROTOCOL_VERSION = 13
15+
PROTOCOL_VERSION = 14
1616
CONFIG_FILE = join(os.getcwd(), 'ob.cfg')
1717

1818
# FIXME probably a better way to do this. This curretly checks two levels deep

0 commit comments

Comments
 (0)