Initial import from local backup (Documents-Playground/pakerpale)
This commit is contained in:
304
application/controllers/Verify.php
Normal file
304
application/controllers/Verify.php
Normal file
@@ -0,0 +1,304 @@
|
||||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Verify class
|
||||
*/
|
||||
|
||||
/**
|
||||
* 이메일 인증 시 필요한 controller 입니다.
|
||||
*/
|
||||
class Verify extends MY_Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* 모델을 로딩합니다
|
||||
*/
|
||||
protected $models = array('User_auth_email');
|
||||
|
||||
/**
|
||||
* 헬퍼를 로딩합니다
|
||||
*/
|
||||
protected $helpers = array('form', 'array');
|
||||
|
||||
function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
/**
|
||||
* 라이브러리를 로딩합니다
|
||||
*/
|
||||
$this->load->library(array('querystring'));
|
||||
if ( ! function_exists('password_hash')) {
|
||||
$this->load->helper('password');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 이메일 인증 함수입니다.
|
||||
*/
|
||||
public function confirmemail()
|
||||
{
|
||||
|
||||
$view = array();
|
||||
$view['view'] = array();
|
||||
|
||||
|
||||
if ( ! $this->input->get('code')) {
|
||||
show_404();
|
||||
}
|
||||
if ( ! $this->input->get('user')) {
|
||||
show_404();
|
||||
}
|
||||
if ($this->userlib->is_user()) {
|
||||
redirect();
|
||||
}
|
||||
if ( ! $this->configlib->item('use_register_email_auth')) {
|
||||
alert('이 웹사이트는 이메일 인증 기능을 사용하고 있지 않습니다');
|
||||
}
|
||||
|
||||
$where = array(
|
||||
'uae_key' => $this->input->get('code'),
|
||||
);
|
||||
$result = $this->User_auth_email_model->get_one('', '', $where);
|
||||
|
||||
if ( ! element('uae_id', $result)) {
|
||||
$view['view']['message'] = '잘못된 접근입니다';
|
||||
} elseif ( ! (element('uae_type', $result) === '1' OR element('uae_type', $result) === '2')) {
|
||||
$view['view']['message'] = '잘못된 접근입니다';
|
||||
} elseif ( ! empty($result['uae_use_datetime']) && element('uae_use_datetime', $result) !== '0000-00-00 00:00:00') {
|
||||
$view['view']['message'] = '회원님은 이미 인증을 받으셨습니다';
|
||||
} elseif (strtotime(element('uae_generate_datetime', $result)) < ctimestamp()- 86400) {
|
||||
$view['view']['message'] = '24 시간 이내에 인증을 받으셔야 합니다';
|
||||
} elseif (element('uae_expired', $result)) {
|
||||
$view['view']['message'] = '잘못된 접근입니다';
|
||||
} else {
|
||||
|
||||
$select = 'user_id, user_email, user_denied, user_email_cert';
|
||||
$dbuser = $this->User_model->get_by_id(element('user_id', $result), $select);
|
||||
|
||||
if ( ! element('user_id', $dbuser)) {
|
||||
$view['view']['message'] = '잘못된 접근입니다';
|
||||
} elseif (element('user_id', $dbuser) !== $this->input->get('user')) {
|
||||
$view['view']['message'] = '잘못된 접근입니다';
|
||||
} elseif (element('user_denied', $dbuser)) {
|
||||
$view['view']['message'] = '접근이 금지된 아이디입니다';
|
||||
} elseif (element('user_email_cert', $dbuser)) {
|
||||
$view['view']['message'] = '회원님은 이미 인증을 받으셨습니다';
|
||||
} else {
|
||||
|
||||
$updatedata = array(
|
||||
'user_email_cert' => 1,
|
||||
);
|
||||
$this->User_model->update(element('user_id', $result), $updatedata);
|
||||
$metadata = array(
|
||||
'meta_email_cert_datetime' => cdate('Y-m-d H:i:s'),
|
||||
);
|
||||
$this->load->model('User_meta_model');
|
||||
$this->User_meta_model->save(element('user_id', $result), $metadata);
|
||||
|
||||
$updateemail = array(
|
||||
'uae_use_datetime' => cdate('Y-m-d H:i:s'),
|
||||
'uae_expired' => 1
|
||||
);
|
||||
$view['view']['message'] = '이메일 인증이 완료되었습니다.<br />감사합니다';
|
||||
$this->User_auth_email_model->update(element('uae_id', $result), $updateemail);
|
||||
|
||||
$this->session->set_userdata('user_id', element('user_id', $dbuser));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 레이아웃을 정의합니다
|
||||
*/
|
||||
$layoutconfig = array(
|
||||
'path' => 'findaccount',
|
||||
'layout' => 'layout',
|
||||
'skin' => 'verifyemail',
|
||||
);
|
||||
$view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->get_device_view_type());
|
||||
$this->data = $view;
|
||||
$this->layout = element('layout_skin_file', element('layout', $view));
|
||||
$this->view = element('view_skin_file', element('layout', $view));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 패스워드 리셋위한 함수입니다.
|
||||
*/
|
||||
public function resetpassword()
|
||||
{
|
||||
|
||||
$view = array();
|
||||
$view['view'] = array();
|
||||
|
||||
|
||||
if ( ! $this->input->get('code')) {
|
||||
show_404();
|
||||
}
|
||||
if ( ! $this->input->get('user')) {
|
||||
show_404();
|
||||
}
|
||||
if ($this->userlib->is_user()) {
|
||||
redirect();
|
||||
}
|
||||
|
||||
$this->load->library(array('form_validation'));
|
||||
|
||||
$password_length = $this->configlib->item('password_length');
|
||||
$view['view']['password_length'] = $password_length;
|
||||
|
||||
$where = array(
|
||||
'uae_key' => $this->input->get('code'),
|
||||
);
|
||||
$result = $this->User_auth_email_model->get_one('', '', $where);
|
||||
|
||||
$view['view']['error_message'] = '';
|
||||
$view['view']['successs_message'] = '';
|
||||
if ( ! element('uae_id', $result)) {
|
||||
$view['view']['error_message'] = '잘못된 접근입니다';
|
||||
} elseif ( ! empty($result['uae_use_datetime']) && element('uae_use_datetime', $result) !== '0000-00-00 00:00:00') {
|
||||
$view['view']['error_message'] = '회원님은 이미 패스워드 변경을 하셨습니다';
|
||||
} elseif (strtotime(element('uae_generate_datetime', $result)) < ctimestamp()- 86400) {
|
||||
$view['view']['message'] = '24 시간 이내에 인증을 받으셔야 합니다';
|
||||
} elseif (element('uae_type', $result) !== '3') {
|
||||
$view['view']['error_message'] = '잘못된 접근입니다';
|
||||
} else {
|
||||
$select = 'user_id, user_email, user_denied, user_email_cert';
|
||||
$dbuser = $this->User_model->get_by_id(element('user_id', $result), $select);
|
||||
if ( ! element('user_id', $dbuser)) {
|
||||
$view['view']['error_message'] = '잘못된 접근입니다';
|
||||
} elseif (element('user_id', $dbuser) !== $this->input->get('user')) {
|
||||
$view['view']['error_message'] = '잘못된 접근입니다';
|
||||
} elseif (element('user_denied', $dbuser)) {
|
||||
$view['view']['error_message'] = '회원님의 계정은 접근이 금지되어 있습니다';
|
||||
} elseif ($this->configlib->item('use_register_email_auth') && ! element('user_email_cert', $dbuser)) {
|
||||
$view['view']['error_message'] = '회원님은 회원가입 후, 또는 이메일 정보 변경후 아직 이메일 인증을 받지 않으셨습니다';
|
||||
}
|
||||
$view['view']['user_email'] = element('user_email', $dbuser);
|
||||
|
||||
}
|
||||
|
||||
$config = array(
|
||||
array(
|
||||
'field' => 'new_password',
|
||||
'label' => '패스워드',
|
||||
'rules' => 'trim|required|min_length[' . $password_length . ']|callback__user_password_check',
|
||||
),
|
||||
array(
|
||||
'field' => 'new_password_re',
|
||||
'label' => '패스워드',
|
||||
'rules' => 'trim|required|min_length[' . $password_length . ']',
|
||||
),
|
||||
);
|
||||
|
||||
$this->form_validation->set_rules($config);
|
||||
/**
|
||||
* 유효성 검사를 하지 않는 경우, 또는 유효성 검사에 실패한 경우입니다.
|
||||
* 즉 글쓰기나 수정 페이지를 보고 있는 경우입니다
|
||||
*/
|
||||
if ($this->form_validation->run() === false) {
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
if (empty($view['view']['error_message'])) {
|
||||
|
||||
$hash = password_hash($this->input->post('new_password'), PASSWORD_BCRYPT);
|
||||
$updatedata = array(
|
||||
'user_password' => $hash,
|
||||
);
|
||||
$this->User_model->update(element('user_id', $result), $updatedata);
|
||||
$metadata = array(
|
||||
'meta_change_pw_datetime' => cdate('Y-m-d H:i:s'),
|
||||
);
|
||||
$this->load->model('User_meta_model');
|
||||
$this->User_meta_model->save(element('user_id', $result), $metadata);
|
||||
|
||||
$updateemail = array(
|
||||
'uae_use_datetime' => cdate('Y-m-d H:i:s'),
|
||||
'uae_expired' => 1
|
||||
);
|
||||
$this->User_auth_email_model->update(element('uae_id', $result), $updateemail);
|
||||
|
||||
$view['view']['success_message'] = '회원님의 패스워드가 변경되었습니다.<br />감사합니다';
|
||||
|
||||
$this->session->set_userdata('user_id', element('user_id', $result));
|
||||
}
|
||||
}
|
||||
|
||||
$password_description = '비밀번호는 ' . $password_length . '자리 이상이어야 ';
|
||||
if ($this->configlib->item('password_uppercase_length') OR $this->configlib->item('password_numbers_length') OR $this->configlib->item('password_specialchars_length')) {
|
||||
$password_description .= '하며 ';
|
||||
if ($this->configlib->item('password_uppercase_length')) {
|
||||
$password_description .= ', ' . $this->configlib->item('password_uppercase_length') . '개의 대문자';
|
||||
}
|
||||
if ($this->configlib->item('password_numbers_length')) {
|
||||
$password_description .= ', ' . $this->configlib->item('password_numbers_length') . '개의 숫자';
|
||||
}
|
||||
if ($this->configlib->item('password_specialchars_length')) {
|
||||
$password_description .= ', ' . $this->configlib->item('password_specialchars_length') . '개의 특수문자';
|
||||
}
|
||||
$password_description .= '를 포함해야 ';
|
||||
}
|
||||
$password_description .= '합니다';
|
||||
|
||||
$view['view']['info'] = $password_description;
|
||||
|
||||
|
||||
/**
|
||||
* 레이아웃을 정의합니다
|
||||
*/
|
||||
$layoutconfig = array(
|
||||
'path' => 'findaccount',
|
||||
'layout' => 'layout',
|
||||
'skin' => 'findaccount_change_pw',
|
||||
);
|
||||
$view['layout'] = $this->layoutlib->front($layoutconfig, $this->configlib->get_device_view_type());
|
||||
$this->data = $view;
|
||||
$this->layout = element('layout_skin_file', element('layout', $view));
|
||||
$this->view = element('view_skin_file', element('layout', $view));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 새로 입력한 패스워드가 규약에 맞는지 체크합니다.
|
||||
*/
|
||||
public function _user_password_check($str)
|
||||
{
|
||||
$uppercase = $this->configlib->item('password_uppercase_length');
|
||||
$number = $this->configlib->item('password_numbers_length');
|
||||
$specialchar = $this->configlib->item('password_specialchars_length');
|
||||
|
||||
$this->load->helper('chkstring');
|
||||
$str_uc = count_uppercase($str);
|
||||
$str_num = count_numbers($str);
|
||||
$str_spc = count_specialchars($str);
|
||||
|
||||
if ($str_uc < $uppercase OR $str_num < $number OR $str_spc < $specialchar) {
|
||||
|
||||
$description = '비밀번호는 ';
|
||||
if ($str_uc < $uppercase) {
|
||||
$description .= ' ' . $uppercase . '개 이상의 대문자';
|
||||
}
|
||||
if ($str_num < $number) {
|
||||
$description .= ' ' . $number . '개 이상의 숫자';
|
||||
}
|
||||
if ($str_spc < $specialchar) {
|
||||
$description .= ' ' . $specialchar . '개 이상의 특수문자';
|
||||
}
|
||||
$description .= '를 포함해야 합니다';
|
||||
|
||||
$this->form_validation->set_message(
|
||||
'_user_password_check',
|
||||
$description
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user