Browse Source

move ffi code into its own file

Grant Limberg 3 years ago
parent
commit
4cadfd736f
2 changed files with 134 additions and 128 deletions
  1. 132 0
      zeroidc/src/ext.rs
  2. 2 128
      zeroidc/src/lib.rs

+ 132 - 0
zeroidc/src/ext.rs

@@ -0,0 +1,132 @@
+mod ext {
+
+    use std::ffi::{CStr, CString};
+    use std::os::raw::c_char;
+
+    use crate::{AuthInfo, ZeroIDC};
+
+    #[no_mangle]
+    pub extern "C" fn zeroidc_new(
+        issuer: *const c_char,
+        client_id: *const c_char,
+        auth_endpoint: *const c_char,
+        web_listen_port: u16,
+    ) -> *mut ZeroIDC {
+        if issuer.is_null() {
+            println!("issuer is null");
+            return std::ptr::null_mut();
+        }
+
+        if client_id.is_null() {
+            println!("client_id is null");
+            return std::ptr::null_mut();
+        }
+
+        if auth_endpoint.is_null() {
+            println!("auth_endpoint is null");
+            return std::ptr::null_mut();
+        }
+
+        let iss = unsafe { CStr::from_ptr(issuer) };
+        let c_id = unsafe { CStr::from_ptr(client_id) };
+        let auth_endpoint = unsafe { CStr::from_ptr(auth_endpoint) };
+        match ZeroIDC::new(
+            iss.to_str().unwrap(),
+            c_id.to_str().unwrap(),
+            auth_endpoint.to_str().unwrap(),
+            web_listen_port,
+        ) {
+            Ok(idc) => {
+                return Box::into_raw(Box::new(idc));
+            }
+            Err(s) => {
+                println!("Error creating ZeroIDC instance: {}", s);
+                return std::ptr::null_mut();
+            }
+        }
+    }
+
+    #[no_mangle]
+    pub extern "C" fn zeroidc_delete(ptr: *mut ZeroIDC) {
+        if ptr.is_null() {
+            return;
+        }
+        unsafe {
+            Box::from_raw(ptr);
+        }
+    }
+
+    #[no_mangle]
+    pub extern "C" fn zeroidc_start(ptr: *mut ZeroIDC) {
+        let idc = unsafe {
+            assert!(!ptr.is_null());
+            &mut *ptr
+        };
+        idc.start();
+    }
+
+    #[no_mangle]
+    pub extern "C" fn zeroidc_stop(ptr: *mut ZeroIDC) {
+        let idc = unsafe {
+            assert!(!ptr.is_null());
+            &mut *ptr
+        };
+        idc.stop();
+    }
+
+    #[no_mangle]
+    pub extern "C" fn zeroidc_get_auth_info(
+        ptr: *mut ZeroIDC,
+        csrf_token: *const c_char,
+        nonce: *const c_char,
+    ) -> *mut AuthInfo {
+        let idc = unsafe {
+            assert!(!ptr.is_null());
+            &mut *ptr
+        };
+
+        if csrf_token.is_null() {
+            println!("csrf_token is null");
+            return std::ptr::null_mut();
+        }
+
+        if nonce.is_null() {
+            println!("nonce is null");
+            return std::ptr::null_mut();
+        }
+
+        let csrf_token = unsafe { CStr::from_ptr(csrf_token) }
+            .to_str()
+            .unwrap()
+            .to_string();
+        let nonce = unsafe { CStr::from_ptr(nonce) }
+            .to_str()
+            .unwrap()
+            .to_string();
+
+        match idc.get_auth_info(csrf_token, nonce) {
+            Some(a) => Box::into_raw(Box::new(a)),
+            None => std::ptr::null_mut(),
+        }
+    }
+
+    #[no_mangle]
+    pub extern "C" fn zeroidc_auth_info_delete(ptr: *mut AuthInfo) {
+        if ptr.is_null() {
+            return;
+        }
+        unsafe {
+            Box::from_raw(ptr);
+        }
+    }
+
+    #[no_mangle]
+    pub extern "C" fn zeroidc_get_auth_url(ptr: *mut AuthInfo) -> *const c_char {
+        let ai = unsafe {
+            assert!(!ptr.is_null());
+            &mut *ptr
+        };
+        let s = CString::new(ai.url.to_string()).unwrap();
+        return s.as_ptr();
+    }
+}

+ 2 - 128
zeroidc/src/lib.rs

@@ -1,3 +1,5 @@
+pub mod ext;
+
 extern crate base64;
 extern crate openidconnect;
 extern crate url;
@@ -13,9 +15,6 @@ use openidconnect::{ClientId, CsrfToken, IssuerUrl, Nonce, PkceCodeChallenge, Re
 
 use url::Url;
 
-use std::ffi::{CStr, CString};
-use std::os::raw::c_char;
-
 pub struct ZeroIDC {
     inner: Arc<Mutex<Inner>>,
 }
@@ -145,128 +144,3 @@ impl ZeroIDC {
         r
     }
 }
-
-#[no_mangle]
-pub extern "C" fn zeroidc_new(
-    issuer: *const c_char,
-    client_id: *const c_char,
-    auth_endpoint: *const c_char,
-    web_listen_port: u16,
-) -> *mut ZeroIDC {
-    if issuer.is_null() {
-        println!("issuer is null");
-        return std::ptr::null_mut();
-    }
-
-    if client_id.is_null() {
-        println!("client_id is null");
-        return std::ptr::null_mut();
-    }
-
-    if auth_endpoint.is_null() {
-        println!("auth_endpoint is null");
-        return std::ptr::null_mut();
-    }
-
-    let iss = unsafe { CStr::from_ptr(issuer) };
-    let c_id = unsafe { CStr::from_ptr(client_id) };
-    let auth_endpoint = unsafe { CStr::from_ptr(auth_endpoint) };
-    match ZeroIDC::new(
-        iss.to_str().unwrap(),
-        c_id.to_str().unwrap(),
-        auth_endpoint.to_str().unwrap(),
-        web_listen_port,
-    ) {
-        Ok(idc) => {
-            return Box::into_raw(Box::new(idc));
-        }
-        Err(s) => {
-            println!("Error creating ZeroIDC instance: {}", s);
-            return std::ptr::null_mut();
-        }
-    }
-}
-
-#[no_mangle]
-pub extern "C" fn zeroidc_delete(ptr: *mut ZeroIDC) {
-    if ptr.is_null() {
-        return;
-    }
-    unsafe {
-        Box::from_raw(ptr);
-    }
-}
-
-#[no_mangle]
-pub extern "C" fn zeroidc_start(ptr: *mut ZeroIDC) {
-    let idc = unsafe {
-        assert!(!ptr.is_null());
-        &mut *ptr
-    };
-    idc.start();
-}
-
-#[no_mangle]
-pub extern "C" fn zeroidc_stop(ptr: *mut ZeroIDC) {
-    let idc = unsafe {
-        assert!(!ptr.is_null());
-        &mut *ptr
-    };
-    idc.stop();
-}
-
-#[no_mangle]
-pub extern "C" fn zeroidc_get_auth_info(
-    ptr: *mut ZeroIDC,
-    csrf_token: *const c_char,
-    nonce: *const c_char,
-) -> *mut AuthInfo {
-    let idc = unsafe {
-        assert!(!ptr.is_null());
-        &mut *ptr
-    };
-
-    if csrf_token.is_null() {
-        println!("csrf_token is null");
-        return std::ptr::null_mut();
-    }
-
-    if nonce.is_null() {
-        println!("nonce is null");
-        return std::ptr::null_mut();
-    }
-
-    let csrf_token = unsafe { CStr::from_ptr(csrf_token) }
-        .to_str()
-        .unwrap()
-        .to_string();
-    let nonce = unsafe { CStr::from_ptr(nonce) }
-        .to_str()
-        .unwrap()
-        .to_string();
-
-    match idc.get_auth_info(csrf_token, nonce) {
-        Some(a) => Box::into_raw(Box::new(a)),
-        None => std::ptr::null_mut(),
-    }
-}
-
-#[no_mangle]
-pub extern "C" fn zeroidc_auth_info_delete(ptr: *mut AuthInfo) {
-    if ptr.is_null() {
-        return;
-    }
-    unsafe {
-        Box::from_raw(ptr);
-    }
-}
-
-#[no_mangle]
-pub extern "C" fn zeroidc_get_auth_url(ptr: *mut AuthInfo) -> *const c_char {
-    let ai = unsafe {
-        assert!(!ptr.is_null());
-        &mut *ptr
-    };
-    let s = CString::new(ai.url.to_string()).unwrap();
-    return s.as_ptr();
-}