remove obsolete cruft in migrate_jyraphe
[coquelicot.git] / tools / migrate_jyraphe.rb
1 #!/usr/bin/env ruby1.8
2 # Coquelicot: "one-click" file sharing with a focus on users' privacy.
3 # Copyright © 2010 potager.org <jardiniers@potager.org>
4 #
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License as
7 # published by the Free Software Foundation, either version 3 of the
8 # License, or (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU Affero General Public License for more details.
14 #
15 # You should have received a copy of the GNU Affero General Public License
16 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18 $:.unshift File.join(File.dirname(__FILE__), '../lib')
19
20 require 'coquelicot'
21
22 class JyrapheMigrator
23   def initialize(jyraphe_var)
24     @var = jyraphe_var
25     @redirects = {}
26   end
27
28   def process
29     process_links
30     puts "RewriteEngine on"
31     @redirects.each_pair do |jyraphe, coquelicot|
32       puts "RewriteRule ^file-#{jyraphe}$ #{coquelicot} [L,R=301]"
33     end
34   end
35
36   def process_links
37     Dir.glob("#{@var}/links/*").each do |link_path|
38       link_name = File.basename(link_path)
39       one_time_only = link_name.slice(0, 1) == 'O'
40       File.open(link_path) do |link_file|
41         filename = link_file.readline.strip
42         mime_type = link_file.readline.strip
43         length = link_file.readline.strip.to_i
44         next if length > 10 * 1024 * 1024
45         file_key = link_file.readline.strip
46         if file_key.empty? then
47           random_pass = Coquelicot::gen_random_pass
48         end
49         expire_at = link_file.readline.strip.to_i
50         expire_at = [Time.now + Coquelicot.settings.maximum_expire,
51                      expire_at].min if expire_at <= 0
52         begin
53           coquelicot_link = File.open("#{@var}/files/#{filename}") do |src|
54             Coquelicot::depot.add_file(
55               src, file_key || random_pass,
56               { "Expire-at" => expire_at,
57                 "One-time-only" => one_time_only,
58                 "Filename" => filename,
59                 "Length" => length,
60                 "Content-Type" => mime_type
61               })
62           end
63           @redirects[link_name] = "#{coquelicot_link}"
64           @redirects[link_name] << "-#{random_pass}" if file_key.empty?
65         rescue Errno::ENOENT => ex
66           STDERR.puts "#{ex}"
67         end
68       end
69     end
70   end
71 end
72
73 def usage
74   STDERR.puts "Usage: #{$0} </path/to/jyraphe/var> </path/to/coquelicot/depot>"
75   exit 1
76 end
77
78 def main
79   usage unless ARGV.length == 2
80   jyraphe_var = ARGV[0]
81   coquelicot_depot = ARGV[1]
82
83   unless File.directory? "#{jyraphe_var}/files" and
84          File.directory? "#{jyraphe_var}/links" then
85     STDERR.puts "#{jyraphe_var} is not a Jyraphe 'var' directory."
86     exit 1
87   end
88   unless File.exists? "#{coquelicot_depot}/.links" then
89     STDERR.puts "#{coquelicot_depot} is not a Coquelicot depot."
90     exit 1
91   end
92
93   Coquelicot::Application.set :depot_path, coquelicot_depot
94   JyrapheMigrator.new(jyraphe_var).process
95 end
96
97 main