let passwordScore = 0; let apiKey = 'c63feb0027f958152bd376d1fa63fff7c8ee86e0a13de5ab2f2ea14303e6278cf507547a04a83d02d3b32650bac7b85e7e8f31e9ea1ab17ef620b378a2a02f16'; let baseUrl = 'https://' + location.hostname; //確認コードテーブルのID let passwordCheckSite = '204330'; let userId = ""; let loginId = ""; let mailAddr = ""; let passWord1 = ""; let passWord2 = ""; let checkPass = ""; //確認コード保管用 let checkCodeId = ""; let timeout; window.addEventListener('load', function () { $('#checkCode').css('display', 'none'); }); function passwordChange1() { loginId = $('#Users_LoginId').val(); mailAddr = $('#MailAddress').val(); passWord1 = $('#Users_Password1').val(); passWord2 = $('#Users_Password2').val(); if (loginId == '') { $('#Guide').html('ログインIDを入力してください!'); $('#Guide').css({ 'background-color': 'red', color: 'white', }); $('#Users_LoginId').focus(); } else if (mailAddr == '') { $('#Guide').html('メールアドレスを入力してください!'); $('#Guide').css({ 'background-color': 'red', color: 'white', }); $('#MailAddress').focus(); } else if (passWord1 == '') { $('#Guide').html('変更後パスワードを入力してください!'); $('#Guide').css({ 'background-color': 'red', color: 'white', }); $('#Users_Password1').focus(); } else if (passWord2 == '') { $('#Guide').html('確認用パスワードを入力してください!'); $('#Guide').css({ 'background-color': 'red', color: 'white', }); $('#Users_Password2').focus(); } else if (passWord1 !== passWord2) { $('#Guide').html('確認用パスワードが一致しません!'); $('#Guide').css({ 'background-color': 'red', color: 'white', }); $('#Users_Password2').focus(); } else if (!isValidPassword(passWord1)) { $('#Guide').html('大文字・小文字・数字をすべて含めてください!'); $('#Guide').css({ 'background-color': 'red', color: 'white', }); } else { if (passwordScore < 3) { $('#Guide').html('安全なパスワードを指定してください'); $('#Guide').css({ 'background-color': 'red', color: 'white', }); $('#Users_Password1').focus(); } else { //エラー無し $('#Guide').html(''); $('#Guide').css({ 'background-color': '', color: '', }); //--------------------------------------------------------------------------- //ログインIDからユーザー情報を取得 let json = { ApiVersion: 1.1, ApiKey: apiKey, View: { ApiGetMailAddresses: true, ColumnFilterHash: { LoginId: loginId, Disabled: false, }, }, }; let url = baseUrl + '/pleasanter/api/users/get'; $.ajax({ type: 'post', async: true, url: url, data: JSON.stringify(json), contentType: 'application/json', scriptCharset: 'utf-8', dataType: 'json', success: function (data) { //console.log(data); if (data.StatusCode == 200) { if (data.Response.TotalCount <= 0) { $('#Guide').html('ログインIDが一致しません!'); $('#Guide').css({ 'background-color': 'red', color: 'white', }); } else { let mailAddresses = data.Response.Data[0].MailAddresses; if (!mailAddresses.includes(mailAddr)) { $('#Guide').html('メールアドレスが一致しません!'); $('#Guide').css({ 'background-color': 'red', color: 'white', }); } else { //ログインIDとメールアドレスが一致している場合、パスワード更新を許可 userId = data.Response.Data[0].UserId; createCheckCode(); } } } }, error: function (data) { console.log(data); $('#Guide').html('処理に失敗しました!'); $('#Guide').css({ 'background-color': 'red', color: 'white', }); }, }); } } } function createCheckCode() { //メインフォームを隠す $('#pwChange').css('display', 'none'); //確認コードの作成 const str = "0123456789abcdefghijklmnopqrstuvwxyz"; const passLength = 8; for (let i = 0; i < passLength; i++) { let selected = Math.floor(Math.random() * str.length); checkPass += str.substring(selected, selected + 1); } //プリザンターのパスワード更新確認テーブルにアップロード let json = { ApiVersion: 1.1, ApiKey: apiKey, "ClassHash": { "ClassA": loginId, "ClassB": mailAddr, "ClassC": passWord1, "ClassD": checkPass }, } let url = baseUrl + '/pleasanter/api/items/' + passwordCheckSite + '/create'; $.ajax({ type: 'post', async: true, url: url, data: JSON.stringify(json), contentType: 'application/json', scriptCharset: 'utf-8', dataType: 'json', success: function (data) { //console.log(data); if (data.StatusCode == 200) { //確認コード入力画面を開く checkCodeId = data.Id; $('#checkCode').css('display', 'block'); //指定時間実施がなかったら、ページを読み込み直してやり直し timeout = window.setTimeout(function () { alert('時間切れです。最初からやり直してください。'); location.reload(); }, 1800000); } }, error: function (data) { console.log(data); $('#Guide').html(data.responseJSON.StatusCode + ':' + data.responseJSON.Message); $('#Guide').css({ 'background-color': 'red', color: 'white', }); $('#pwChange').css('display', 'block'); }, }); } function passwordChange2() { let inputCode = $('#inputCode').val(); if (checkPass === inputCode) { let json = { ApiVersion: 1.1, ApiKey: apiKey, Password: passWord1, Lockout: false, LockoutCounter: 0, }; let url = baseUrl + '/pleasanter/api/users/' + userId + '/update'; $.ajax({ type: 'post', async: true, url: url, data: JSON.stringify(json), contentType: 'application/json', scriptCharset: 'utf-8', dataType: 'json', success: function (data) { //console.log(data); if (data.StatusCode == 200) { $('#Guide').html('パスワードを更新しました!'); $('#Guide').css({ 'background-color': 'blue', color: 'white', }); //変数初期化 userId = ""; loginId = ""; mailAddr = ""; passWord1 = ""; passWord2 = ""; checkPass = ""; //確認コードテーブルの更新 checkCodeComplete(); $('#checkCode').css('display', 'none'); //タイマー停止 window.clearTimeout(timeout); } }, error: function (data) { console.log(data); $('#Guide').html(data.responseJSON.StatusCode + ':' + data.responseJSON.Message); $('#Guide').css({ 'background-color': 'red', color: 'white', }); }, }); } else { $('#Guide').html('確認コードが一致しません!'); $('#Guide').css({ 'background-color': 'red', color: 'white', }); } } function isValidPassword(str) { const ratz = /[a-z]/, rAtZ = /[A-Z]/, r0t9 = /[0-9]/; return ratz.test(str) && rAtZ.test(str) && r0t9.test(str); } function checkCodeComplete() { let json = { ApiVersion: 1.1, ApiKey: apiKey, "Status": 900, } let url = baseUrl + '/pleasanter/api/items/' + checkCodeId + '/update'; $.ajax({ type: 'post', async: true, url: url, data: JSON.stringify(json), contentType: 'application/json', scriptCharset: 'utf-8', dataType: 'json', success: function (data) { console.log(data); }, error: function (data) { console.log(data); } }); } function formReset() { console.log('Form Reset'); $('#Users_LoginId').val(''); $('#MailAddress').val(''); $('#Users_Password1').val(''); $('#Users_Password2').val(''); //エラー無し $('#Guide').html(''); $('#Guide').css({ 'background-color': '', color: '', }); const meter = document.querySelector('#password-strength-meter'); meter.className = ''; $('#passwordScore').html('パスワードを入力してください'); } function passwordCheck() { const meter = document.querySelector('#password-strength-meter'); let loginId = $('#Users_LoginId').val(); let mailAddr = $('#MailAddress').val(); let passWord1 = $('#Users_Password1').val(); //let passWord2 = $('#Users_Password2').val(); let results = zxcvbn(passWord1, [loginId, mailAddr, 'Next', 'next', 'NEXT', 'Ntk', 'ntk', 'NTK', 'aichi', 'AICHI', 'actie', 'Kimi', 'kimi', 'KIMI', 'graph', 'Graph']); //console.log(results); const strength = results.score; if (passWord1.length === 0) { meter.className = ''; $('#passwordScore').html('パスワードを入力してください'); //パスワードが入力されているとき } else { passwordScore = strength; meter.className = 'progress-bar strength-' + strength; switch (strength) { case 0: $('#passwordScore').html('非常に脆弱なパスワードです'); break; case 1: $('#passwordScore').html('脆弱なパスワードです'); break; case 2: $('#passwordScore').html('弱いパスワードです'); break; case 3: $('#passwordScore').html('安全なパスワードです'); break; case 4: $('#passwordScore').html('非常に安全なパスワードです'); break; } } } function goHome() { window.location.href = baseUrl + '/pleasanter/'; }