forked from chipchaderez/Wiki-Link-Validator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.rb
70 lines (60 loc) · 1.48 KB
/
app.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
require 'sinatra'
require 'sinatra/cross_origin'
require 'base64'
require 'open3'
require 'fileutils'
set :port, 8081
set :bind, '0.0.0.0'
configure do
enable :cross_origin
end
get '/' do
"the time where this server lives is #{Time.now}
<br /><br />check out your <a href=\"/agent\">user_agent</a>"
end
get '/agent' do
"you're using #{request.user_agent}"
end
pids = Hash.new
logs = Hash.new
get '/validate/:url' do
url = Base64.decode64(params['url'])
timestamp = params['timestamp']
wikiName = url.split('/').last;
wikiDir = '%s_%s' % [wikiName, timestamp]
# Clone wiki repo
FileUtils.mkdir_p('wikis')
Open3.popen3('cd wikis && git clone %s %s' % [url, wikiDir]) do |stdin, stdout, stderr, wait_thr|
puts "stdout:" + stdout.read
unless /exit 0/ =~ wait_thr.value.to_s
halt 500 , stderr.read
end
end
# Kill previous process if exists
pid = pids[url]
begin
if pid != nil
Process.kill('KILL', pid)
end
rescue Exception
end
# Execute validation process
begin
logFile = "%s/logs/%s" % [Dir.pwd, wikiDir]
FileUtils.mkdir_p('logs')
pid = Process.spawn('cd .. && ./wiki-links-validity.py -d server/wikis/%s/ -l %s' % [wikiDir, logFile])
pids.store(url, pid.to_i + 1)
logs.store(url, logFile)
rescue Exception => e
puts e.backtrace
halt 500 , e.message
end
end
get '/log/:url' do
url = Base64.decode64(params['url']);
begin
IO.read(logs[url])
rescue Exception => e
puts e.message
end
end