summary refs log tree commit diff homepage
path: root/src/http.cr
diff options
context:
space:
mode:
Diffstat (limited to 'src/http.cr')
-rw-r--r--src/http.cr31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/http.cr b/src/http.cr
index 1179f73..1d0be13 100644
--- a/src/http.cr
+++ b/src/http.cr
@@ -35,8 +35,9 @@ end
 
 class Server
   def initialize(cfg)
-    @opennic_host = URI.parse(cfg.opennic_remote).host
     @db = Database.new cfg.db, cfg.opennic_remote, cfg.icann_remote
+
+    @opennic_host = URI.parse(cfg.opennic_remote).host
     @opennic_page = Page.new cfg.opennic_local, cfg.opennic_remote,
                              cfg.api, @db
     @opennic_page.write
@@ -116,7 +117,35 @@ class Server
     end
   end
 
+  getter db
+  getter opennic_page
+  getter icann_page
+
   def listen(port)
+    @db.update_hook ->(arg : Void*, action : Database::UpdateAction,
+                       db : LibC::Char*, table : LibC::Char*, rowid : Int64) {
+      return unless db == "main"
+      obj = arg.as Server
+      case table
+      when "member"
+        case action
+        in .delete?
+          obj.db.members.delete rowid
+        in .insert?, .update?
+          obj.db.update_member rowid
+        end
+      when "applicant"
+        case action
+        in .delete?
+          obj.db.applicants.delete rowid
+        in .insert?, .update?
+          obj.db.update_applicant rowid
+        end
+      end
+      obj.opennic_page.write
+      obj.icann_page.write
+    }, self.as Void*
+
     puts "Listening on http://#{@server.bind_tcp port}"
     @server.listen
   end