diff options
Diffstat (limited to 'anzen.rb')
-rw-r--r-- | anzen.rb | 88 |
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 |