+7
Gemfile
+7
Gemfile
+8
Gemfile.lock
+8
Gemfile.lock
···
46
46
minitest (5.25.5)
47
47
mustermann (3.0.4)
48
48
ruby2_keywords (~> 0.0.1)
49
+
nio4r (2.7.4)
49
50
pg (1.6.1)
50
51
pg (1.6.1-aarch64-linux)
51
52
pg (1.6.1-aarch64-linux-musl)
···
59
60
psych (5.2.6)
60
61
date
61
62
stringio
63
+
puma (6.6.1)
64
+
nio4r (~> 2.0)
62
65
rack (3.2.0)
63
66
rack-protection (4.1.1)
64
67
base64 (>= 0.1.0)
···
67
70
rack-session (2.1.1)
68
71
base64 (>= 0.1.0)
69
72
rack (>= 3.0.0)
73
+
rackup (2.2.1)
74
+
rack (>= 3)
70
75
rainbow (3.1.1)
71
76
rake (13.3.0)
72
77
rdoc (6.14.2)
···
107
112
irb
108
113
minisky (~> 0.5)
109
114
pg
115
+
puma
116
+
rackup
110
117
rainbow
111
118
rake
119
+
sinatra
112
120
sinatra-activerecord (~> 2.0)
113
121
114
122
BUNDLED WITH
+4
app/models/post.rb
+4
app/models/post.rb
+44
app/server.rb
+44
app/server.rb
···
1
+
require 'json'
2
+
require 'sinatra/base'
3
+
4
+
require_relative 'init'
5
+
require_relative 'models/like'
6
+
require_relative 'models/user'
7
+
8
+
class Server < Sinatra::Application
9
+
register Sinatra::ActiveRecordExtension
10
+
set :port, 3000
11
+
12
+
PAGE_LIMIT = 5
13
+
14
+
helpers do
15
+
def json_response(data)
16
+
content_type :json
17
+
JSON.generate(data)
18
+
end
19
+
20
+
def json_error(name, message, status: 400)
21
+
content_type :json
22
+
[status, JSON.generate({ error: name, message: message })]
23
+
end
24
+
end
25
+
26
+
get '/xrpc/blue.feeds.lycan.searchPosts' do
27
+
headers['access-control-allow-origin'] = '*'
28
+
29
+
if settings.development?
30
+
user = User.find_by(did: params[:user])
31
+
return json_error('UserNotFound', 'Missing "user" parameter') if user.nil?
32
+
end
33
+
34
+
if params[:query]
35
+
query = params[:query].gsub('%', "\\%")
36
+
likes = user.likes.joins(:post).includes(:post => :user).where("text ILIKE ?", "%#{query}%").order('likes.time DESC').limit(PAGE_LIMIT)
37
+
post_uris = likes.map(&:post).map(&:at_uri)
38
+
39
+
json_response(posts: post_uris)
40
+
else
41
+
json_error('MissingParameter', 'Missing "query" parameter')
42
+
end
43
+
end
44
+
end