]> git.openstreetmap.org Git - rails.git/blobdiff - lib/daemons/session_cleanup.rb
Add a daemon to cleanup stale sessions.
[rails.git] / lib / daemons / session_cleanup.rb
diff --git a/lib/daemons/session_cleanup.rb b/lib/daemons/session_cleanup.rb
new file mode 100644 (file)
index 0000000..08e2dea
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/env ruby
+
+#You might want to change this
+#ENV["RAILS_ENV"] ||= "development"
+
+require File.dirname(__FILE__) + "/../../config/environment"
+
+require 'pstore'
+
+terminated = false
+
+session_path = ActionController::Base.session_options[:tmpdir]
+
+def expire_session(name)
+  ActiveRecord::Base.logger.info("Expiring session #{File.basename(name)}")
+  FileUtils.rm_f(name)
+end
+
+while (true) do
+  Dir.foreach(session_path) do |session_name|
+    if session_name =~ /^ruby_sess\./
+      session_name = session_path + "/" + session_name
+      session = PStore.new(session_name)
+
+      session.transaction do |session|
+        session_hash = session['hash']
+
+        if session_hash
+          session_stat = File::Stat.new(session_name)
+            puts session_hash[:token]
+
+          if session_hash[:token] and User.find_by_token(session_hash[:token])
+#            expire_session(session_name) if session_stat.mtime < 1.day.ago
+          else
+            expire_session(session_name) if session_stat.mtime < 1.hour.ago
+          end
+        else
+          expire_session(session_name)
+        end
+      end
+    end
+  end
+
+  sleep 15.minutes
+end