common install 프로세스 완료.

This commit is contained in:
2018-03-18 00:16:17 +09:00
parent 5a0b358b60
commit ce169f356e
6 changed files with 190 additions and 10 deletions
+4 -4
View File
@@ -4,8 +4,6 @@ require(ROOT.'/f_func/class._Time.php');
use utilphp\util as util;
session_start();
?>
<!DOCTYPE html>
<html lang="ko">
@@ -109,14 +107,16 @@ session_start();
<div class="form-group row">
<label for="nickname" class="col-sm-3 col-form-label">닉네임</label>
<div class="col-sm-9">
<input type="text" class="form-control" name="nickname" id="nickname" placeholder="닉네임"/>
<input type="text" class="form-control" name="nickname" id="nickname" placeholder="닉네임" value="운영자"/>
</div>
</div>
<input type="hidden" id="global_salt" name="global_salt">
<div class="form-group row">
<div class="col-sm-3"></div>
<div class="col-sm-9">
<button type="submit" class="btn btn-primary btn-lg btn-block login-button">관리자 생성</button>
<button type="submit" class="btn btn-primary btn-lg btn-block login-button">관리자 계정 생성</button>
</div>
</div>
</form>
+79
View File
@@ -0,0 +1,79 @@
<?php
require('_common.php');
require(__DIR__.'/../f_config/SETTING.php');
require(ROOT.'/f_func/class._Time.php');
use utilphp\util as util;
$username = util::array_get($_POST['username']);
$password = util::array_get($_POST['password']);
$nickname = util::array_get($_POST['nickname']);
if(!$username || !$password || !$nickname){
returnJson([
'result'=>false,
'reason'=>'입력값이 설정되지 않았습니다.'
]);
}
if(strlen($password)!=128){
returnJson([
'result'=>false,
'reason'=>'올바르지 않은 비밀번호 해시 포맷입니다.'
]);
}
if(!$SETTING->isExist()){
returnJson([
'result'=>false,
'reason'=>'DB 설정이 완료되지 않았습니다.'
]);
}
require(__DIR__.'/../f_config/DB.php');
$rootDB = getRootDB();
//초기 관리자 계정은 딱 하나만 있어야하므로, 중요함.
$rootDB->query('LOCK TABLES member WRITE, member_log WRITE');
$memberCnt = $rootDB->queryFirstField('SELECT count(`NO`) from member');
if($memberCnt > 0){
returnJson([
'result'=>'false',
'reason'=>'이미 계정이 생성되어 있습니다'
]);
}
$userSalt = bin2hex(random_bytes(8));
$finalPassword = hashPassword($userSalt, $password);
$nowDate = _Time::DatetimeNow();
$rootDB->insert('member',[
'oauth_type' => 'NONE',
'id' => $username,
'email' => null,
'pw' => $finalPassword,
'salt' => $userSalt,
'grade'=> 5,
'name'=>$nickname,
'reg_date'=>$nowDate
]);
$userID = $rootDB->insertId();
$rootDB->insert('member_log', [
'member_no'=>$userID,
'date'=>$nowDate,
'action_type'=>'reg',
'action'=>json_encode([
'type'=>'none',
'aux'=>'admin',
'id'=>$username,
'name'=>$nickname
], JSON_UNESCAPED_UNICODE)
]);
returnJson([
'result'=>true,
'reason'=>'success'
]);
+2 -2
View File
@@ -4,7 +4,6 @@ require('_common.php');
require(__DIR__.'/../f_config/SETTING.php');
use utilphp\util as util;
session_start();
function dbConnFail($params){
returnJson([
@@ -34,7 +33,8 @@ $rootDB->error_handler = 'dbSQLFail';
$memberCnt = $rootDB->queryFirstField('SELECT count(`NO`) from MEMBER');
if($memberCnt === 0){
returnJson([
'step'=>'admin'
'step'=>'admin',
'globalSalt'=>getGlobalSalt()
]);
}
+1 -2
View File
@@ -4,7 +4,6 @@ require('_common.php');
require(__DIR__.'/../f_config/SETTING.php');
use utilphp\util as util;
session_start();
function dbConnFail($params){
returnJson([
@@ -142,5 +141,5 @@ if($result !== true){
returnJson([
'result'=>true,
'reason'=>'NYI'
'reason'=>'success'
]);
+1 -1
View File
@@ -21,7 +21,7 @@ ENGINE=InnoDB DEFAULT CHARSET=UTF8;
CREATE TABLE `member` (
`NO` INT(11) NOT NULL AUTO_INCREMENT,
`oauth_id` BIGINT(20) NULL DEFAULT NULL,
`oauth_type` ENUM('NONE','KAKAO') NULL DEFAULT NULL,
`oauth_type` ENUM('NONE','KAKAO') NOT NULL,
`ID` VARCHAR(64) NOT NULL,
`EMAIL` VARCHAR(64) NULL DEFAULT NULL,
`PW` CHAR(128) NOT NULL,
+103 -1
View File
@@ -15,6 +15,7 @@ function changeInstallMode(){
if(result.step == 'admin'){
$('#db_form_card').hide();
$('#admin_form_card').show();
$('#global_salt').val(result.globalSalt);
return;
}
if(result.step == 'done'){
@@ -35,6 +36,8 @@ function changeInstallMode(){
return;
}
alert('알 수 없는 오류' + result);
});
}
@@ -66,7 +69,7 @@ $(document).ready( function () {
unhighlight: function (element, errorClass, validClass) {
$( element ).addClass( "is-valid" ).removeClass( "is-invalid" );
}
})
});
$('#db_form').submit(function(e){
e.preventDefault();
if(!$("#db_form").valid()){
@@ -102,4 +105,103 @@ $(document).ready( function () {
});
});
$( "#admin_form" ).validate( {
rules: {
username: {
required: true,
minlength: 4,
maxlength: 64,
},
password: {
required: true,
minlength: 6
},
confirm_password: {
required: true,
minlength: 6,
equalTo: "#password"
},
nickname:{
required: true,
maxlength: 6,
}
},
messages: {
username: {
required: "유저명을 입력해주세요",
minlength: "{0}글자 이상 입력하셔야 합니다",
maxlength: '{0}자를 넘을 수 없습니다'
},
password: {
required: "비밀번호를 입력해주세요",
minlength: "비밀번호는 적어도 {0}글자 이상이어야 합니다"
},
confirm_password: {
required: "비밀번호를 입력해주세요",
minlength: "비밀번호는 적어도 {0}글자 이상이어야 합니다",
equalTo: "비밀번호가 일치하지 않습니다"
},
nickname: {
required: "닉네임을 입력해주세요",
maxlength: '닉네임은 {0}자를 넘을 수 없습니다'
}
},
errorElement: "div",
errorPlacement: function ( error, element ) {
// Add the `help-block` class to the error element
error.addClass( "invalid-feedback" );
if ( element.prop( "type" ) === "checkbox" ) {
error.insertAfter( element.parent( "label" ) );
} else {
error.insertAfter( element );
}
},
highlight: function ( element, errorClass, validClass ) {
$( element ).addClass( "is-invalid" ).removeClass( "is-valid" );
},
unhighlight: function (element, errorClass, validClass) {
$( element ).addClass( "is-valid" ).removeClass( "is-invalid" );
}
});
$('#admin_form').submit(function(e){
e.preventDefault();
if(!$("#admin_form").valid()){
return;
}
var raw_password = $('#password').val();
var salt = $('#global_salt').val();
console.log(salt + raw_password + salt);
var hash_pw = sha512(salt + raw_password + salt);
$.ajax({
cache:false,
type:'post',
url:'j_create_admin.php',
dataType:'json',
data:{
username:$('#username').val(),
password:hash_pw,
nickname:$('#nickname').val()
}
}).then(function(result){
var deferred = $.Deferred();
if(!result.result){
alert(result.reason);
deferred.reject('fail');
}
else{
deferred.resolve();
}
return deferred.promise();
}).then(function(){
changeInstallMode();
});
});
});