+7
Gemfile
+7
Gemfile
+8
Gemfile.lock
+8
Gemfile.lock
···
46
minitest (5.25.5)
47
mustermann (3.0.4)
48
ruby2_keywords (~> 0.0.1)
49
pg (1.6.1)
50
pg (1.6.1-aarch64-linux)
51
pg (1.6.1-aarch64-linux-musl)
···
59
psych (5.2.6)
60
date
61
stringio
62
rack (3.2.0)
63
rack-protection (4.1.1)
64
base64 (>= 0.1.0)
···
67
rack-session (2.1.1)
68
base64 (>= 0.1.0)
69
rack (>= 3.0.0)
70
rainbow (3.1.1)
71
rake (13.3.0)
72
rdoc (6.14.2)
···
107
irb
108
minisky (~> 0.5)
109
pg
110
rainbow
111
rake
112
sinatra-activerecord (~> 2.0)
113
114
BUNDLED WITH
···
46
minitest (5.25.5)
47
mustermann (3.0.4)
48
ruby2_keywords (~> 0.0.1)
49
+
nio4r (2.7.4)
50
pg (1.6.1)
51
pg (1.6.1-aarch64-linux)
52
pg (1.6.1-aarch64-linux-musl)
···
60
psych (5.2.6)
61
date
62
stringio
63
+
puma (6.6.1)
64
+
nio4r (~> 2.0)
65
rack (3.2.0)
66
rack-protection (4.1.1)
67
base64 (>= 0.1.0)
···
70
rack-session (2.1.1)
71
base64 (>= 0.1.0)
72
rack (>= 3.0.0)
73
+
rackup (2.2.1)
74
+
rack (>= 3)
75
rainbow (3.1.1)
76
rake (13.3.0)
77
rdoc (6.14.2)
···
112
irb
113
minisky (~> 0.5)
114
pg
115
+
puma
116
+
rackup
117
rainbow
118
rake
119
+
sinatra
120
sinatra-activerecord (~> 2.0)
121
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