summaryrefslogtreecommitdiffstats
path: root/lib/api/kolab_api_service_form_value.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/kolab_api_service_form_value.php')
-rw-r--r--lib/api/kolab_api_service_form_value.php164
1 files changed, 164 insertions, 0 deletions
diff --git a/lib/api/kolab_api_service_form_value.php b/lib/api/kolab_api_service_form_value.php
new file mode 100644
index 0000000..0d16bdb
--- /dev/null
+++ b/lib/api/kolab_api_service_form_value.php
@@ -0,0 +1,164 @@
+<?php
+
+/**
+ *
+ */
+class kolab_api_service_form_value extends kolab_api_service
+{
+
+ public function capabilities($domain)
+ {
+ return array(
+ 'generate_cn' => 'w',
+ 'generate_displayname' => 'w',
+ 'generate_mail' => 'w',
+ 'generate_password' => 'r',
+ 'generate_uid' => 'w',
+ 'generate_userpassword' => 'r',
+// 'info' => 'r',
+ );
+ }
+
+ public function generate_cn($getdata, $postdata)
+ {
+ if (!isset($postdata['user_type_id'])) {
+ throw new Exception("No user type ID specified", 34);
+ }
+
+ $sql_result = $this->db->query("SELECT attributes FROM user_types WHERE id = ?", $postdata['user_type_id']);
+ $user_type = $this->db->fetch_assoc($sql_result);
+
+ $uta = json_decode(unserialize($user_type['attributes']), true);
+
+ if (isset($uta['auto_form_fields']) && isset($uta['auto_form_fields']['cn'])) {
+ // Use Data Please
+ foreach ($uta['auto_form_fields']['cn']['data'] as $key) {
+ if (!isset($postdata[$key])) {
+ throw new Exception("Key not set: " . $key, 12356);
+ }
+ }
+
+ return array("cn" => $postdata['givenname'] . " " . $postdata['sn']);
+ }
+ }
+
+ public function generate_displayname($getdata, $postdata)
+ {
+ if (!isset($postdata['user_type_id'])) {
+ throw new Exception("No user type ID specified", 34);
+ }
+
+ $sql_result = $this->db->query("SELECT attributes FROM user_types WHERE id = ?", $postdata['user_type_id']);
+ $user_type = $this->db->fetch_assoc($sql_result);
+
+ $uta = json_decode(unserialize($user_type['attributes']), true);
+
+ if (isset($uta['auto_form_fields']) && isset($uta['auto_form_fields']['displayname'])) {
+ // Use Data Please
+ foreach ($uta['auto_form_fields']['displayname']['data'] as $key) {
+ if (!isset($postdata[$key])) {
+ throw new Exception("Key not set: " . $key, 12356);
+ }
+ }
+
+ return array("displayname" => $postdata['sn'] . ", " . $postdata['givenname']);
+ }
+
+ }
+
+ public function generate_mail($getdata, $postdata)
+ {
+ if (!isset($postdata['user_type_id'])) {
+ throw new Exception("No user type ID specified", 34);
+ }
+
+ $sql_result = $this->db->query("SELECT attributes FROM user_types WHERE id = ?", $postdata['user_type_id']);
+ $user_type = $this->db->fetch_assoc($sql_result);
+
+ $uta = json_decode(unserialize($user_type['attributes']), true);
+
+ if (isset($uta['auto_form_fields']) && isset($uta['auto_form_fields']['mail'])) {
+ // Use Data Please
+ foreach ($uta['auto_form_fields']['mail']['data'] as $key) {
+ if (!isset($postdata[$key])) {
+ throw new Exception("Key not set: " . $key, 12356);
+ }
+ }
+
+ $givenname = iconv('UTF-8', 'ASCII//TRANSLIT', $postdata['givenname']);
+ $sn = iconv('UTF-8', 'ASCII//TRANSLIT', $postdata['sn']);
+
+ $givenname = strtolower($givenname);
+ $sn = str_replace(' ', '', $sn);
+ $sn = strtolower($sn);
+
+ $mail = $givenname . "." . $sn . "@" . $_SESSION['user']->get_domain();
+
+ $orig_mail = $mail;
+
+ $auth = Auth::get_instance($_SESSION['user']->get_domain());
+
+ $x = 2;
+ while ($auth->user_find_by_attribute(array('mail' => $mail))) {
+ list($mail_local, $mail_domain) = explode('@', $orig_mail);
+ $mail = $mail_local . $x . '@' . $mail_domain;
+ $x++;
+ }
+
+ return array('mail' => $mail);
+ }
+ }
+
+ public function generate_password($getdata, $postdata)
+ {
+ exec("head -c 200 /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c15", $userpassword_plain);
+ $userpassword_plain = $userpassword_plain[0];
+ return array('password' => $userpassword_plain);
+ }
+
+ public function generate_uid($getdata, $postdata)
+ {
+ if (!isset($postdata['user_type_id'])) {
+ throw new Exception("No user type ID specified", 34);
+ }
+
+ $sql_result = $this->db->query("SELECT attributes FROM user_types WHERE id = ?", $postdata['user_type_id']);
+ $user_type = $this->db->fetch_assoc($sql_result);
+
+ $uta = json_decode(unserialize($user_type['attributes']), true);
+
+ if (isset($uta['auto_form_fields']) && isset($uta['auto_form_fields']['uid'])) {
+ // Use Data Please
+ foreach ($uta['auto_form_fields']['uid']['data'] as $key) {
+ if (!isset($postdata[$key])) {
+ throw new Exception("Key not set: " . $key, 12356);
+ }
+ }
+
+ $uid = iconv('UTF-8', 'ASCII//TRANSLIT', $postdata['sn']);
+ $uid = strtolower($uid);
+ $uid = str_replace(' ', '', $uid);
+
+ $orig_uid = $uid;
+
+ $auth = Auth::get_instance($_SESSION['user']->get_domain());
+
+ $user = $auth->user_find_by_attribute(array('uid' => $uid));
+
+ $x = 2;
+ while ($auth->user_find_by_attribute(array('uid' => $uid))) {
+ $uid = $orig_uid . $x;
+ $x++;
+ }
+
+ return array('uid' => $uid);
+ }
+ }
+
+ public function generate_userpassword($getdata, $postdata)
+ {
+ $password = $this->generate_password($getdata, $postdata);
+ return array('userpassword' => $password['password']);
+ }
+
+}