summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'anzen.rb')
-rw-r--r--anzen.rb88
1 files changed, 88 insertions, 0 deletions
diff --git a/anzen.rb b/anzen.rb
new file mode 100644
index 0000000..cd52ec7
--- /dev/null
+++ b/anzen.rb
@@ -0,0 +1,88 @@
+# /usr/bin/env ruby
+# 安全 [anzen] aka security.gentoo.org
+# Alex Legler <a3li@gentoo.org>
+# AGPLv3
+
+require 'bundler/setup'
+require 'yaml'
+require 'singleton'
+require 'nokogiri'
+require 'sinatra'
+require 'sinatra/partial'
+
+require_relative 'lib/helpers.rb'
+require_relative 'lib/glsa_repository.rb'
+
+configure do
+ set :partial_template_engine, :erb
+ mime_type :atom, 'application/atom+xml'
+end
+
+# Implicitly load advisories
+GLSARepository.instance
+
+BASE_URL = 'https://security.gentoo.org/'.freeze
+
+get '/glsa' do
+ @ids = GLSARepository.instance.get.keys.reverse
+ @nav = :glsa
+ erb :glsa
+end
+
+get '/glsa/feed.:format' do
+ items = GLSARepository.instance.get.values.reverse[0..50]
+ case params[:format]
+ when 'atom'
+ content_type :atom
+ feed('atom', items)
+ when 'rss1'
+ content_type :xml
+ feed('1.0', items)
+ when 'rss', 'rss2'
+ content_type :xml
+ feed('2.0', items)
+ else
+ status 404
+ body 'Feed not available.'
+ return
+ end
+end
+
+get '/glsa/:glsaid.xml' do
+ if params[:glsaid] =~ /^\d{6}-\d{2}$/ and GLSARepository.instance.has? params[:glsaid]
+ send_file(File.join(File.dirname(__FILE__), 'data/glsa/glsa-' + params[:glsaid] + '.xml'), type: :xml)
+ else
+ status 404
+ body 'GLSA not found.'
+ return
+ end
+end
+
+get '/glsa/:glsaid' do
+ if GLSARepository.instance.has? params[:glsaid]
+ @glsa = GLSARepository.instance[params[:glsaid]]
+ template = :glsa
+
+ if @glsa.is_a? GLSAv1
+ template = :'glsa/glsav1'
+ end
+
+ @nav = :glsa
+ erb template
+ else
+ status 404
+ body 'GLSA not found.'
+ return
+ end
+end
+
+get '/subscribe' do
+ @nav = :subscribe
+ erb :subscribe
+end
+
+get '/' do
+ @ids = GLSARepository.instance.get.keys.reverse
+ @nav = :index
+ erb :index
+end