common install 프로세스 완료.
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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'
|
||||
]);
|
||||
@@ -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()
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -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'
|
||||
]);
|
||||
@@ -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
@@ -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();
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user