PageRenderTime 42ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/source/function/function_seccode.php

https://github.com/jinbo51/DiscuzX
PHP | 72 lines | 61 code | 5 blank | 6 comment | 16 complexity | f7ee23064cac420899c9863a3c569663 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: function_seccode.php 30388 2012-05-25 06:45:40Z monkey $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. function make_seccode($idhash){
  12. global $_G;
  13. $seccode = random(6, 1);
  14. $seccodeunits = '';
  15. if($_G['setting']['seccodedata']['type'] == 1) {
  16. $lang = lang('seccode');
  17. $len = strtoupper(CHARSET) == 'GBK' ? 2 : 3;
  18. $code = array(substr($seccode, 0, 3), substr($seccode, 3, 3));
  19. $seccode = '';
  20. for($i = 0; $i < 2; $i++) {
  21. $seccode .= substr($lang['chn'], $code[$i] * $len, $len);
  22. }
  23. } elseif($_G['setting']['seccodedata']['type'] == 3) {
  24. $s = sprintf('%04s', base_convert($seccode, 10, 20));
  25. $seccodeunits = 'CEFHKLMNOPQRSTUVWXYZ';
  26. } else {
  27. $s = sprintf('%04s', base_convert($seccode, 10, 24));
  28. $seccodeunits = 'BCEFGHJKMPQRTVWXY2346789';
  29. }
  30. if($seccodeunits) {
  31. $seccode = '';
  32. for($i = 0; $i < 4; $i++) {
  33. $unit = ord($s{$i});
  34. $seccode .= ($unit >= 0x30 && $unit <= 0x39) ? $seccodeunits[$unit - 0x30] : $seccodeunits[$unit - 0x57];
  35. }
  36. }
  37. dsetcookie('seccode'.$idhash, authcode(strtoupper($seccode)."\t".(TIMESTAMP - 180)."\t".$idhash."\t".FORMHASH, 'ENCODE', $_G['config']['security']['authkey']), 0, 1, true);
  38. return $seccode;
  39. }
  40. function make_secqaa($idhash) {
  41. global $_G;
  42. loadcache('secqaa');
  43. $secqaakey = max(1, random(1, 1));
  44. if($_G['cache']['secqaa'][$secqaakey]['type']) {
  45. $etype = explode(':', $_G['cache']['secqaa'][$secqaakey]['question']);
  46. if(count($etype) > 1) {
  47. $qaafile = DISCUZ_ROOT.'./source/plugin/'.$etype[0].'/secqaa/secqaa_'.$etype[1].'.php';
  48. $class = $etype[1];
  49. } else {
  50. $qaafile = libfile('secqaa/'.$_G['cache']['secqaa'][$secqaakey]['question'], 'class');
  51. $class = $_G['cache']['secqaa'][$secqaakey]['question'];
  52. }
  53. if(file_exists($qaafile)) {
  54. @include_once $qaafile;
  55. $class = 'secqaa_'.$class;
  56. if(class_exists($class)) {
  57. $qaa = new $class();
  58. if(method_exists($qaa, 'make')) {
  59. $_G['cache']['secqaa'][$secqaakey]['answer'] = md5($qaa->make($_G['cache']['secqaa'][$secqaakey]['question']));
  60. }
  61. }
  62. }
  63. }
  64. dsetcookie('secqaa'.$idhash, authcode($_G['cache']['secqaa'][$secqaakey]['answer']."\t".(TIMESTAMP - 180)."\t".$idhash."\t".FORMHASH, 'ENCODE', $_G['config']['security']['authkey']), 0, 1, true);
  65. return $_G['cache']['secqaa'][$secqaakey]['question'];
  66. }
  67. ?>