| 1 |
<?php |
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
/******************************************************** |
|---|
| 5 |
* * |
|---|
| 6 |
* API FUNCTIONS * |
|---|
| 7 |
* * |
|---|
| 8 |
********************************************************/ |
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
function keylock_get_config($engine) |
|---|
| 13 |
{ |
|---|
| 14 |
global $db; |
|---|
| 15 |
global $ext; |
|---|
| 16 |
|
|---|
| 17 |
switch($engine) { |
|---|
| 18 |
case "asterisk": |
|---|
| 19 |
$modulename = "keylock"; |
|---|
| 20 |
|
|---|
| 21 |
$lock_label = "keylock_lock"; |
|---|
| 22 |
$unlock_label = "keylock_unlock"; |
|---|
| 23 |
$toggle_label = "keylock_toggle"; |
|---|
| 24 |
$setpass_label = "keylock_setpass"; |
|---|
| 25 |
|
|---|
| 26 |
$fcl = new featurecode($modulename, $lock_label); |
|---|
| 27 |
$fcu = new featurecode($modulename, $unlock_label); |
|---|
| 28 |
$fct = new featurecode($modulename, $toggle_label); |
|---|
| 29 |
$fcs = new featurecode($modulename, $setpass_label); |
|---|
| 30 |
|
|---|
| 31 |
$lock = $fcl->getCodeActive(); |
|---|
| 32 |
$lock_rgxp = "_" . $lock . "."; |
|---|
| 33 |
$unlock = $fcu->getCodeActive(); |
|---|
| 34 |
$unlock_rgxp = "_" . $unlock . "."; |
|---|
| 35 |
$toggle = $fct->getCodeActive(); |
|---|
| 36 |
$setpass = $fcs->getCodeActive(); |
|---|
| 37 |
$unknown = "s"; //unknown extension |
|---|
| 38 |
|
|---|
| 39 |
$ctx_toggle = "keylock-toggle"; |
|---|
| 40 |
$ctx_lock = "keylock-lock"; |
|---|
| 41 |
$ctx_unlock = "keylock-unlock"; |
|---|
| 42 |
$ctx_hints = "keylock-hints"; |
|---|
| 43 |
$macro_check = "macro-keylock-check"; |
|---|
| 44 |
$macro_setpass = "macro-keylock-setpass"; |
|---|
| 45 |
$macro_setpass_name = "keylock-setpass"; |
|---|
| 46 |
$ctx_keylock = "ext-keylock"; |
|---|
| 47 |
$ctx_setpass = "keylock-setpass"; |
|---|
| 48 |
|
|---|
| 49 |
//Macro check |
|---|
| 50 |
$ext->add($macro_check, $unknown, '', new ext_noop("Checking block...")); |
|---|
| 51 |
$ext->add($macro_check, $unknown, '', new ext_set("me", '${CALLERID(num)}')); |
|---|
| 52 |
$ext->add($macro_check, $unknown, '', new ext_gotoif('${DB(KEYLOCK/${me}/locked)}', "blocked", "unblocked")); |
|---|
| 53 |
$ext->add($macro_check, $unknown, 'blocked', new ext_noop("Blocked...")); |
|---|
| 54 |
$ext->add($macro_check, $unknown, '', new ext_answer()); |
|---|
| 55 |
$ext->add($macro_check, $unknown, '', new ext_playback("security")); |
|---|
| 56 |
$ext->add($macro_check, $unknown, '', new ext_playback("activated")); |
|---|
| 57 |
$ext->add($macro_check, $unknown, '', new ext_macro ('hangupcall')); |
|---|
| 58 |
$ext->add($macro_check, $unknown, 'unblocked', new ext_noop("Calling...")); |
|---|
| 59 |
|
|---|
| 60 |
//Locking context |
|---|
| 61 |
//Unconditionally set caller/locked to 1 in AstDB |
|---|
| 62 |
$ext->add($ctx_lock, $lock, '', new ext_answer()); |
|---|
| 63 |
$ext->add($ctx_lock, $lock, '', new ext_set("me", '${CALLERID(num)}')); |
|---|
| 64 |
$ext->add($ctx_lock, $lock, '', new ext_gotoif('${DB_EXISTS(KEYLOCK/${me}/password)}', "exists", "not_exists")); |
|---|
| 65 |
$ext->add($ctx_lock, $lock, 'not_exists', new ext_macro($macro_setpass_name)); |
|---|
| 66 |
$ext->add($ctx_lock, $lock, '', new ext_goto('authenticated')); |
|---|
| 67 |
$ext->add($ctx_lock, $lock, 'exists', new ext_set('PASSWORD','${DB(KEYLOCK/${me}/password)}')); |
|---|
| 68 |
$ext->add($ctx_lock, $lock, '', new ext_authenticate('${PASSWORD}')); |
|---|
| 69 |
$ext->add($ctx_lock, $lock, '', new ext_goto('authenticated')); |
|---|
| 70 |
$ext->add($ctx_lock, $lock, 'authenticated', new ext_set('DB(KEYLOCK/${me}/locked)', '1')); |
|---|
| 71 |
$ext->add($ctx_lock, $lock, '', new ext_set('STATE', 'BUSY')); |
|---|
| 72 |
$ext->add($ctx_lock, $lock, '', new ext_gosub(1, 'sstate',$ctx_lock)); |
|---|
| 73 |
$ext->add($ctx_lock, $lock, '', new ext_playback("security")); |
|---|
| 74 |
$ext->add($ctx_lock, $lock, '', new ext_playback("now")); |
|---|
| 75 |
$ext->add($ctx_lock, $lock, '', new ext_playback("activated")); |
|---|
| 76 |
$ext->add($ctx_lock, $lock, '', new ext_hangup()); |
|---|
| 77 |
$ext->add($ctx_lock, 'sstate', '', new ext_setvar('DEVSTATE(Custom:KLC${me})','${STATE}')); |
|---|
| 78 |
$ext->add($ctx_lock, 'sstate', 'return', new ext_return()); |
|---|
| 79 |
|
|---|
| 80 |
|
|---|
| 81 |
|
|---|
| 82 |
$rgxp_length = strlen($lock); |
|---|
| 83 |
$ext->add($ctx_lock, $lock_rgxp, '', new ext_answer()); |
|---|
| 84 |
$ext->add($ctx_lock, $lock_rgxp, '', new ext_set("ME", '${CALLERID(num)}')); |
|---|
| 85 |
$ext->add($ctx_lock, $lock_rgxp, '', new ext_set('PASSWORD','${DB(KEYLOCK/${ME}/password)}')); |
|---|
| 86 |
$ext->add($ctx_lock, $lock_rgxp, '', new ext_noop("\${EXTEN:$rgxp_length}")); |
|---|
| 87 |
$ext->add($ctx_lock, $lock_rgxp, '', new ext_gotoif("\$[ \${PASSWORD} = \${EXTEN:$rgxp_length}]", "$lock,authenticated")); |
|---|
| 88 |
$ext->add($ctx_lock, $lock_rgxp, '', new ext_playback("vm-invalidpassword")); |
|---|
| 89 |
$ext->add($ctx_lock, $lock_rgxp, '', new ext_hangup()); |
|---|
| 90 |
|
|---|
| 91 |
|
|---|
| 92 |
//Unlocking context |
|---|
| 93 |
$ext->add($ctx_unlock, $unlock, '', new ext_answer()); |
|---|
| 94 |
$ext->add($ctx_unlock, $unlock, '', new ext_set("ME", '${CALLERID(num)}')); |
|---|
| 95 |
$ext->add($ctx_unlock, $unlock, '', new ext_gotoif('${DB(KEYLOCK/${ME}/locked)}', "locked", "unlocked")); |
|---|
| 96 |
$ext->add($ctx_unlock, $unlock, 'locked', new ext_playback("security")); |
|---|
| 97 |
$ext->add($ctx_unlock, $unlock, '', new ext_playback("activated")); |
|---|
| 98 |
$ext->add($ctx_unlock, $unlock, '', new ext_set('PASSWORD','${DB(KEYLOCK/${ME}/password)}')); |
|---|
| 99 |
$ext->add($ctx_unlock, $unlock, '', new ext_authenticate('${PASSWORD}')); |
|---|
| 100 |
$ext->add($ctx_unlock, $unlock, '', new ext_goto('authenticated')); |
|---|
| 101 |
$ext->add($ctx_unlock, $unlock, 'authenticated', new ext_dbdel('KEYLOCK/${ME}/locked')); |
|---|
| 102 |
$ext->add($ctx_unlock, $unlock, '', new ext_set('STATE', 'NOT_INUSE')); |
|---|
| 103 |
$ext->add($ctx_unlock, $unlock, '', new ext_gosub(1, 'sstate',$ctx_unlock)); |
|---|
| 104 |
$ext->add($ctx_unlock, $unlock, '', new ext_goto('unlocked')); |
|---|
| 105 |
$ext->add($ctx_unlock, $unlock, 'unlocked', new ext_playback("security")); |
|---|
| 106 |
$ext->add($ctx_unlock, $unlock, '', new ext_playback("now")); |
|---|
| 107 |
$ext->add($ctx_unlock, $unlock, '', new ext_playback("de-activated")); |
|---|
| 108 |
$ext->add($ctx_unlock, $unlock, '', new ext_hangup()); |
|---|
| 109 |
$ext->add($ctx_unlock, 'sstate', '', new ext_setvar('DEVSTATE(Custom:KLC${ME})','${STATE}')); |
|---|
| 110 |
$ext->add($ctx_unlock, 'sstate', 'return', new ext_return()); |
|---|
| 111 |
|
|---|
| 112 |
$rgxp_length = strlen($unlock); |
|---|
| 113 |
$ext->add($ctx_unlock, $unlock_rgxp, '', new ext_answer()); |
|---|
| 114 |
$ext->add($ctx_unlock, $unlock_rgxp, '', new ext_set("ME", '${CALLERID(num)}')); |
|---|
| 115 |
$ext->add($ctx_unlock, $unlock_rgxp, '', new ext_set('PASSWORD','${DB(KEYLOCK/${ME}/password)}')); |
|---|
| 116 |
$ext->add($ctx_unlock, $unlock_rgxp, '', new ext_noop("\${EXTEN:$rgxp_length}")); |
|---|
| 117 |
$ext->add($ctx_unlock, $unlock_rgxp, '', new ext_gotoif("\$[ \${PASSWORD} = \${EXTEN:$rgxp_length}]", "$unlock,authenticated")); |
|---|
| 118 |
$ext->add($ctx_unlock, $unlock_rgxp, '', new ext_playback("vm-invalidpassword")); |
|---|
| 119 |
$ext->add($ctx_unlock, $unlock_rgxp, '', new ext_hangup()); |
|---|
| 120 |
|
|---|
| 121 |
//Toggle context [keylock-toggle] |
|---|
| 122 |
$ext->add($ctx_toggle, $toggle, '', new ext_macro('user-callerid')); |
|---|
| 123 |
$ext->add($ctx_toggle, $toggle, '', new ext_set("me",'${CALLERID(num)}')); |
|---|
| 124 |
$ext->add($ctx_toggle, $toggle, '', new ext_gotoif('${DB(KEYLOCK/${me}/locked)}',"keylock-unlock,$unlock,locked","keylock-lock,$lock,1")); |
|---|
| 125 |
|
|---|
| 126 |
//Setpass Macro |
|---|
| 127 |
$ext->add($macro_setpass, $unknown, '', new ext_set('ME','${CALLERID(num)}')); |
|---|
| 128 |
$ext->add($macro_setpass, $unknown, '', new ext_gotoif('${DB(KEYLOCK/${ME}/password)}','set','read')); |
|---|
| 129 |
$ext->add($macro_setpass, $unknown, 'set', new ext_set('PASSWORD','${DB(KEYLOCK/${ME}/password)}')); |
|---|
| 130 |
$ext->add($macro_setpass, $unknown, '', new ext_authenticate('${PASSWORD}')); |
|---|
| 131 |
$ext->add($macro_setpass, $unknown, '', new ext_goto('notset')); |
|---|
| 132 |
$ext->add($macro_setpass, $unknown, 'read', new ext_read('PASSWORD','vm-newpassword')); |
|---|
| 133 |
$ext->add($macro_setpass, $unknown, '', new ext_gotoif('$["${PASSWORD}"!=""]','notset','read')); |
|---|
| 134 |
$ext->add($macro_setpass, $unknown, 'notset', new ext_set('DB(KEYLOCK/${ME}/password)','${PASSWORD}')); |
|---|
| 135 |
$ext->add($macro_setpass, $unknown, '', new ext_playback("vm-passchanged")); |
|---|
| 136 |
|
|---|
| 137 |
//Setpass context [keylock-setpass] |
|---|
| 138 |
$ext->add($ctx_setpass, $setpass, '', new ext_answer()); |
|---|
| 139 |
$ext->add($ctx_setpass, $setpass, '', new ext_macro($macro_setpass_name)); |
|---|
| 140 |
$ext->add($ctx_setpass, $setpass, '', new ext_hangup()); |
|---|
| 141 |
|
|---|
| 142 |
//keylock context [ext-keylock] |
|---|
| 143 |
$patterns = explode("\n", keylock_get_patterns()); |
|---|
| 144 |
foreach ($patterns as &$pattern) |
|---|
| 145 |
{ |
|---|
| 146 |
$pattern = trim($pattern); |
|---|
| 147 |
} |
|---|
| 148 |
unset($pattern); // fixing php bug! |
|---|
| 149 |
foreach ($patterns as $pattern) |
|---|
| 150 |
{ |
|---|
| 151 |
if (!empty($pattern)) |
|---|
| 152 |
{ |
|---|
| 153 |
$ext->add($ctx_keylock, "_".$pattern, '', new ext_macro('keylock-check')); |
|---|
| 154 |
} |
|---|
| 155 |
} |
|---|
| 156 |
|
|---|
| 157 |
|
|---|
| 158 |
|
|---|
| 159 |
//keylock hints [keylock-hints] |
|---|
| 160 |
$users = keylock_get_users(); |
|---|
| 161 |
foreach ($users as $user) |
|---|
| 162 |
{ |
|---|
| 163 |
$extension = $toggle . $user["extension"]; |
|---|
| 164 |
$hint = "SIP/" . $user["extension"] . "&" . "CUSTOM:KLC". $user["extension"]; |
|---|
| 165 |
$ext->add($ctx_hints, $extension, '', new ext_goto(1, $toggle, $ctx_toggle)); |
|---|
| 166 |
$ext->addHint($ctx_hints, $extension, $hint); |
|---|
| 167 |
} |
|---|
| 168 |
$ext->addInclude($ctx_keylock,$ctx_hints); |
|---|
| 169 |
$ext->addInclude($ctx_keylock,$ctx_toggle); |
|---|
| 170 |
$ext->addInclude($ctx_keylock,$ctx_lock); |
|---|
| 171 |
$ext->addInclude($ctx_keylock,$ctx_unlock); |
|---|
| 172 |
$ext->addInclude($ctx_keylock,$ctx_setpass); |
|---|
| 173 |
$ext->addInclude('from-internal-additional',$ctx_keylock); |
|---|
| 174 |
break; |
|---|
| 175 |
} |
|---|
| 176 |
} |
|---|
| 177 |
|
|---|
| 178 |
|
|---|
| 179 |
|
|---|
| 180 |
|
|---|
| 181 |
function keylock_get_users() |
|---|
| 182 |
{ |
|---|
| 183 |
global $db; |
|---|
| 184 |
$sql = "SELECT extension FROM users"; |
|---|
| 185 |
$results = $db->getAll($sql, array(), DB_FETCHMODE_ASSOC); |
|---|
| 186 |
if(DB::IsError($results)) { |
|---|
| 187 |
$results = null; |
|---|
| 188 |
} |
|---|
| 189 |
return $results; |
|---|
| 190 |
} |
|---|
| 191 |
|
|---|
| 192 |
function keylock_get_patterns() |
|---|
| 193 |
{ |
|---|
| 194 |
global $db; |
|---|
| 195 |
|
|---|
| 196 |
$sql = "SELECT patterns FROM keylock_patterns WHERE id_patterns = 1 LIMIT 1"; |
|---|
| 197 |
$results = $db->getAll($sql, array(), DB_FETCHMODE_ASSOC); |
|---|
| 198 |
if(DB::IsError($results)) { |
|---|
| 199 |
$results = null; |
|---|
| 200 |
} |
|---|
| 201 |
return $results[0]["patterns"]; |
|---|
| 202 |
} |
|---|
| 203 |
|
|---|
| 204 |
function keylock_set_patterns($patterns) |
|---|
| 205 |
{ |
|---|
| 206 |
global $db; |
|---|
| 207 |
$patterns = $db->escapeSimple($patterns); |
|---|
| 208 |
$sql = "UPDATE keylock_patterns SET patterns = '$patterns' WHERE id_patterns = 1 LIMIT 1"; |
|---|
| 209 |
sql($sql); |
|---|
| 210 |
return TRUE; |
|---|
| 211 |
} |
|---|
| 212 |
|
|---|
| 213 |
|
|---|
| 214 |
|
|---|
| 215 |
|
|---|
| 216 |
|
|---|
| 217 |
?> |
|---|