Fix 'make dist'
[moonshot-ui.git] / src / moonshot-server.vala
similarity index 60%
rename from src/moonshot-server-msrpc.vala
rename to src/moonshot-server.vala
index 35f3207..05d41d3 100644 (file)
@@ -1,3 +1,77 @@
+#if IPC_DBUS
+
+[DBus (name = "org.janet.Moonshot")]
+public class MoonshotServer : Object {
+
+    private MainWindow main_window;
+
+    public MoonshotServer (Gtk.Window window)
+    {
+        this.main_window = (MainWindow) window;
+    }
+
+    /**
+     * This is the function used by the GSS mechanism to get the NAI,
+     * password and certificate of the ID card for the specificated service.
+     *
+     * The function will block until the user choose the ID card.
+     *
+     * @param nai NAI of the ID Card (optional)
+     * @param password Password of the ID Card (optional)
+     * @param service Service application request an ID Card for
+     * @param nai_out NAI stored in the ID Card
+     * @param password_out Password stored in the ID Card
+     * @param certificate Certificate stored in th ID Card
+     *
+     * @return true if the user choose a correct ID card for that service,
+     *         false otherwise.
+     */
+    public async bool get_identity (string nai,
+                                    string password,
+                                    string service,
+                                    out string nai_out,
+                                    out string password_out,
+                                    out string certificate_out)
+    {
+        bool has_service = false;
+
+        var request = new IdentityRequest (main_window,
+                                           nai,
+                                           password,
+                                           service);
+        request.set_callback ((IdentityRequest) => get_identity.callback());
+        request.execute ();
+        yield;
+
+        nai_out = "";
+        password_out = "";
+        certificate_out = "";
+
+        var id_card = request.id_card;
+
+        if (id_card != null) {
+            foreach (string id_card_service in id_card.services)
+            {
+                if (id_card_service == service)
+                    has_service = true;
+            }
+
+            if (has_service)
+            {
+                nai_out = id_card.nai;
+                password_out = id_card.password;
+                certificate_out = "certificate";
+
+                return true;
+            }
+        }
+
+        return false;
+    }
+}
+
+#elif IPC_MSRPC
+
 using Rpc;
 using MoonshotRpcInterface;
 
@@ -102,3 +176,5 @@ public class MoonshotServer : Object {
         request.mutex.unlock ();
     }
 }
+
+#endif