]> gitweb.michael.orlitzky.com - mailshears.git/blobdiff - lib/rm/plugins/roundcube.rb
Rename PostfixadminDb, RoundcubeDb without the Db suffix.
[mailshears.git] / lib / rm / plugins / roundcube.rb
diff --git a/lib/rm/plugins/roundcube.rb b/lib/rm/plugins/roundcube.rb
new file mode 100644 (file)
index 0000000..3dbee8e
--- /dev/null
@@ -0,0 +1,51 @@
+require 'pg'
+
+require 'common/roundcube_plugin'
+require 'rm/rm_plugin'
+
+class RoundcubeRm
+
+  include RoundcubePlugin
+  include RmPlugin
+
+  def delete_account(account)
+    # Delete the given username and any records in other tables
+    # belonging to it.
+    raise NonexistentAccountError.new(account) if not user_exists(account)
+
+    user_id = self.get_user_id(account)
+
+    # The Roundcube developers were nice enough to include
+    # DBMS-specific install and upgrade scripts, so Postgres can take
+    # advantage of ON DELETE triggers. Here's an example:
+    #
+    #  ...
+    #  user_id integer NOT NULL
+    #    REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE
+    #
+    # This query is of course necessary with any DBMS:
+    sql_queries = ['DELETE FROM users WHERE user_id = $1::int;']
+
+    begin
+      connection = PGconn.connect(@db_host,
+                                  @db_port,
+                                  @db_opts,
+                                  @db_tty,
+                                  @db_name,
+                                  @db_user,
+                                  @db_pass)
+
+      sql_queries.each do |sql_query|
+        connection.query(sql_query, [user_id])
+      end
+
+      connection.close()
+
+    rescue PGError => e
+      # Pretend like we're database-agnostic in case we ever are.
+      raise DatabaseError.new(e)
+    end
+
+  end
+
+end