Ver código fonte

add_reset_pwd

ming 3 anos atrás
pai
commit
f40971785f

+ 7 - 3
api/main.py

@@ -265,10 +265,10 @@ async def reset_pwd_page():
     return FileResponse('static/reset_pwd.html')
 
 @app.get('/send_reset_pwd')
-async def reset_password(user_id):
+async def send_reset_pwd(user_id,email):
     code = str(time.time()).replace('.','')
     db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
-    db['reset_pw_code'].insert({'code':code,'user_id':user_id})
+    db['reset_pw_code'].insert({'code':code,'user_id':user_id,'email':email})
     msg = '請至點擊網址以重設密碼 : https://www.choozmo.com:8887/reset_password?code='+code
     msg =msg.encode(encoding='utf-8')
     user_dict = next(iter(db.query('SELECT * FROM users where id ="'+str(user_id)+'"')))
@@ -281,7 +281,11 @@ async def reset_password(req :models.reset_pwd):
     veri_obj = next(iter(db.query('SELECT * FROM reset_pw_code where code ="'+str(req.code)+'"')))
     if veri_obj != None:
         db['reset_pw_code'].delete(code=req.code)
-    val = db.query('UPDATE users SET password = '+'"'+get_password_hash(req.password)+'" where id ='+str(veri_obj['user_id']))
+    if veri_obj['user_id'] == -1:
+        val = db.query('UPDATE users SET password = '+'"'+get_password_hash(req.password)+'" where id ='+str(veri_obj['user_id']))
+    else:
+        user_id = user.get_id_by_email(veri_obj['email'])
+        val = db.query('UPDATE users SET password = '+'"'+get_password_hash(req.password)+'" where id ='+str(user_id))
     return {"msg": "ok"}
 
 @app.get("/gen_avatar")

+ 5 - 3
api/static/reset_pwd.html

@@ -76,10 +76,12 @@
     <div class="content ms-auto">
       <form id="msform">
         <fieldset id='imgSrc'>
-          <h3 class="fs-subtitle" style="display: inline-block;">影像連結<img class="ms-1" src="static/img/question.png" alt="" data-bs-toggle="tooltip" data-bs-placement="right" title="僅接受png, jpg, mp4格式"></h3><br/>
-          <input type="text" name='m1' class='imgsrc imgsrc1' value="" placeholder="1" /><input id="img1" type="file" class="img_uploader img_up"><label for="img1" class="upload-btn">上傳檔案</label><br/>
+          <h3 class="fs-subtitle" style="display: inline-block;">email<img class="ms-1" src="static/img/question.png" alt="" data-bs-toggle="tooltip" data-bs-placement="right" title="僅接受png, jpg, mp4格式"></h3><br/>
+          <input type="text" id='in_pwd' name='m1' class='imgsrc imgsrc1' value="" placeholder="1" /><br/>
+          <h3 class="fs-subtitle" style="display: inline-block;">驗證碼<img class="ms-1" src="static/img/question.png" alt="" data-bs-toggle="tooltip" data-bs-placement="right" title="僅接受png, jpg, mp4格式"></h3><br/>
+          <input type="text" id='code' name='m1' class='imgsrc imgsrc1' value="" placeholder="1" /><br/>
         
-          <input id="checker" type="button" class="gen_avatar action-button" value="送出" />
+          <input id="checker" type="button" class="sender action-button" value="送出" />
 
         </fieldset>
       </form>

+ 18 - 166
api/static/reset_pwd.js

@@ -1,174 +1,26 @@
 
-$('input[type=file]').on('change', prepareUpload);
+$(".sender").click(function () {
 
-// Grab the files and set them to our variable
-function prepareUpload(event) {
-  files = event.target.files;
-  var data = new FormData();
-  //data.append('file', $('.img_up1').prop('files')[0]);
-  data.append('file', files[0]);
-  // append other variables to data if you want: data.append('field_name_x', field_value_x);
-  $(this).next().text('');
-  $(this).next().html('<img src="static/img/Spinner-1s-181px.gif">');
-  $.ajax({
-    type: 'POST',
-    processData: false, // important
-    contentType: false, // important
-    data: data,
-    url: 'uploadfile',
-    dataType: 'json',
-    success: function (jsonData) {
-      event.target.previousSibling.value =jsonData.msg;
-      $(this).prev().val(jsonData.msg);
-      event.target.nextSibling.innerHTML = '';
-      event.target.nextSibling.textContent = '上傳檔案';
-      //console.log($(this).next());
-      //$(this).next().html('上傳檔案');
-      //$(this).next().text('上傳檔案');
-    },
-    error: function (error) {
-      event.target.nextSibling.innerHTML = '';
-      event.target.nextSibling.textContent = '上傳檔案';
-      alert('圖片錯誤');
-    }
-  });
-}
-const button = document.querySelector('.next');
-
-$(".next").click(function () {
-  button.setAttribute('disabled', '');
-  setTimeout(function () {
-    button.removeAttribute('disabled')
-  }, 4000);
-
-  dataOBJ = { "name": name_title, "text_content": txtARR, "image_urls": imgARR, "avatar": avatar, "client_id": client_id }
-  objstr = JSON.stringify(dataOBJ);
-  console.log(dataOBJ)
-  //alert('資料已送出! 請耐心等候')
-  $.ajax({
-    url: '/make_anchor_video_v2',
-    //url: 'http://www.choozmo.com:8888/qqreq',
-    dataType : 'json', // 預期從server接收的資料型態
-    contentType : 'application/json; charset=utf-8', // 要送到server的資料型態
-    type: 'post',
-    data: objstr,
-    success: function(suc_data) {
-      Swal.fire({
-        title: "資料已送出",
-        icon: 'success',
-        text: `${suc_data.msg}`,
-        confirmButtonColor: '#3085d6',
-      });  
-      },
-    //data:JSON.stringify({n1:"12",n2:"22"}),
-    error: function (error) {
-      console.error(error)
-    }
-  });
+  var pwd = $("#in_pwd").val;
+  var code = $("#code").val;
   
-  });
-
-$(".gen_avatar").click(function () {
-
-  dataOBJ = { "imgurl": $('.imgsrc').val() }
-  objstr = JSON.stringify(dataOBJ);
-  console.log(dataOBJ)
-  //alert('資料已送出! 請耐心等候')
-  $.ajax({
-    url: '192.168.1.106:8887/swapFace',
-    dataType: 'json', // 預期從server接收的資料型態
-    contentType: 'application/json; charset=utf-8', // 要送到server的資料型態
-    type: 'post',
-    data: objstr,
-    success: function (suc_data) {
-      alert(suc_data.msg)
-    },
-    //data:JSON.stringify({n1:"12",n2:"22"}),
-    error: function (error) {
-      console.error(error)
-    }
-  });
-
-});
-
-var loaded_data = ''
-function openNav() {
-  document.getElementById("mySidenav").style.width = "250px";
-  document.querySelector('.loader').style.display = "block";
-  $.get("192.168.1.106:8887/history_input", function (data, status) {
-    console.log(data)
-    loaded_data = data
-    for (var obj of data) {
-      var historyList = document.querySelector('.historyList');
-      var list = document.createElement('li');
-      list.id = obj.id;
-      // div-imgfr
-      var divImgfr = document.createElement('div');
-      divImgfr.classList.add('item_imgfr');
-      var img = document.createElement('img');
-      img.setAttribute('src', obj['image_urls'][0]);
-      divImgfr.appendChild(img);
-      // div-content
-      var contentBox = document.createElement('div');
-      contentBox.classList.add('content-box');
-      var boxTitle = document.createElement('p');
-      boxTitle.classList.add('box-title');
-      boxTitle.textContent = obj.name;
-      boxTitle.id = obj.id;
-      boxTitle.setAttribute('onclick', 'load_data()');
-
-      var boxLink = document.createElement('span');
-      boxLink.classList.add('box-link');
-      boxLink.setAttribute("data-url", obj.link);
-      boxLink.setAttribute('onclick', 'view()');
-      boxLink.innerHTML = '<i class="fas fa-play-circle me-1"></i>觀看影片';
-      contentBox.appendChild(boxTitle);
-      contentBox.appendChild(boxLink);
-      list.classList.add("historyList-item");
-      list.setAttribute('onclick', 'load_data()');
-      list.appendChild(divImgfr);
-      list.appendChild(contentBox);
-      historyList.appendChild(list);
-    }
-    document.querySelector('.loader').style.display = "none";
-  });
-}
-function closeNav() {
-  document.getElementById("mySidenav").style.width = "250px";
-}
+  var url = "/reset_pwd";
 
-function view() {
-  event.stopPropagation();
-  console.log(event.target);
-  if(event.target.nodeName === 'I') {
-    return;
-  } else {
-    window.open(`http://${event.target.dataset.url}`, '_blank');
-  }
-}
+var xhr = new XMLHttpRequest();
+xhr.open("POST", url);
 
+xhr.setRequestHeader("accept", "application/json");
+xhr.setRequestHeader("Content-Type", "application/json");
 
-function load_data() {
-  var title = document.getElementById("title");
-  var linker = document.getElementById("linker");
+xhr.onreadystatechange = function () {
+   if (xhr.readyState === 4) {
+      alert('重設成功')
+   }};
 
-  myModal.hide()
-  tid = event.srcElement.id
-  console.log(tid);
-  linker.setAttribute('href', `http://${loaded_data.find(item => item.id == tid).link}`)
-  linker.setAttribute('target', '_blank')
-  $("#linker").html(`http://${loaded_data.find(item => item.id == tid).link}`)
-  $("#linker").show();
-  $(".linker__box").show();
+var data = {
+  "code": code,
+  "password": pwd
+};
 
-  $(".title_new").val(loaded_data.find(item => item.id == tid).name)
-  var step;
-  for (step = 1; step <= 10; step++) {
-    $(".txtsrc" + step).val(loaded_data.find(item => item.id == tid).text_content[step - 1])
-  }
-  var step2;
-  for (step2 = 1; step2 <= 10; step2++) {
-    $(".imgsrc" + step2).val(loaded_data.find(item => item.id == tid).image_urls[step2 - 1])
-  }
-
-}
+xhr.send(data);
+});

+ 3 - 3
api/static/reset_pwd_email.html

@@ -76,10 +76,10 @@
     <div class="content ms-auto">
       <form id="msform">
         <fieldset id='imgSrc'>
-          <h3 class="fs-subtitle" style="display: inline-block;">影像連結<img class="ms-1" src="static/img/question.png" alt="" data-bs-toggle="tooltip" data-bs-placement="right" title="僅接受png, jpg, mp4格式"></h3><br/>
-          <input type="text" name='m1' class='imgsrc imgsrc1' value="" placeholder="1" /><input id="img1" type="file" class="img_uploader img_up"><label for="img1" class="upload-btn">上傳檔案</label><br/>
+          <h3 class="fs-subtitle" style="display: inline-block;">email<img class="ms-1" src="static/img/question.png" alt="" data-bs-toggle="tooltip" data-bs-placement="right" title="僅接受png, jpg, mp4格式"></h3><br/>
+          <input type="text" id='in_email' name='m1' class='imgsrc imgsrc1' value="" placeholder="1" /><br/>
         
-          <input id="checker" type="button" class="gen_avatar action-button" value="送出" />
+          <input id="checker" type="button" class="sender action-button" value="送出" />
 
         </fieldset>
       </form>

+ 12 - 135
api/static/reset_pwd_email.js

@@ -1,142 +1,19 @@
 
-$('input[type=file]').on('change', prepareUpload);
+$(".sender").click(function () {
 
-// Grab the files and set them to our variable
-function prepareUpload(event) {
-  files = event.target.files;
-  var data = new FormData();
-  //data.append('file', $('.img_up1').prop('files')[0]);
-  data.append('file', files[0]);
-  // append other variables to data if you want: data.append('field_name_x', field_value_x);
-  $(this).next().text('');
-  $(this).next().html('<img src="static/img/Spinner-1s-181px.gif">');
-  $.ajax({
-    type: 'POST',
-    processData: false, // important
-    contentType: false, // important
-    data: data,
-    url: 'uploadfile',
-    dataType: 'json',
-    success: function (jsonData) {
-      event.target.previousSibling.value =jsonData.msg;
-      $(this).prev().val(jsonData.msg);
-      event.target.nextSibling.innerHTML = '';
-      event.target.nextSibling.textContent = '上傳檔案';
-      //console.log($(this).next());
-      //$(this).next().html('上傳檔案');
-      //$(this).next().text('上傳檔案');
-    },
-    error: function (error) {
-      event.target.nextSibling.innerHTML = '';
-      event.target.nextSibling.textContent = '上傳檔案';
-      alert('圖片錯誤');
-    }
-  });
-}
-const button = document.querySelector('.next');
+  var email = $("#in_email").val
+  var url = "/send_reset_pwd?user_id=-1&email="+email;
 
+  var xhr = new XMLHttpRequest();
+  xhr.open("GET", url);
 
-$(".gen_avatar").click(function () {
+  xhr.setRequestHeader("accept", "application/json");
 
-  dataOBJ = { "imgurl": $('.imgsrc').val() }
-  objstr = JSON.stringify(dataOBJ);
-  console.log(dataOBJ)
-  //alert('資料已送出! 請耐心等候')
-  $.ajax({
-    url: '/swapFace',
-    dataType: 'json', // 預期從server接收的資料型態
-    contentType: 'application/json; charset=utf-8', // 要送到server的資料型態
-    type: 'post',
-    data: objstr,
-    success: function (suc_data) {
-      alert(suc_data.msg)
-    },
-    //data:JSON.stringify({n1:"12",n2:"22"}),
-    error: function (error) {
-      console.error(error)
-    }
-  });
-
-});
-
-var loaded_data = ''
-function openNav() {
-  document.getElementById("mySidenav").style.width = "250px";
-  document.querySelector('.loader').style.display = "block";
-  $.get("192.168.1.106:8887/history_input", function (data, status) {
-    console.log(data)
-    loaded_data = data
-    for (var obj of data) {
-      var historyList = document.querySelector('.historyList');
-      var list = document.createElement('li');
-      list.id = obj.id;
-      // div-imgfr
-      var divImgfr = document.createElement('div');
-      divImgfr.classList.add('item_imgfr');
-      var img = document.createElement('img');
-      img.setAttribute('src', obj['image_urls'][0]);
-      divImgfr.appendChild(img);
-      // div-content
-      var contentBox = document.createElement('div');
-      contentBox.classList.add('content-box');
-      var boxTitle = document.createElement('p');
-      boxTitle.classList.add('box-title');
-      boxTitle.textContent = obj.name;
-      boxTitle.id = obj.id;
-      boxTitle.setAttribute('onclick', 'load_data()');
-
-      var boxLink = document.createElement('span');
-      boxLink.classList.add('box-link');
-      boxLink.setAttribute("data-url", obj.link);
-      boxLink.setAttribute('onclick', 'view()');
-      boxLink.innerHTML = '<i class="fas fa-play-circle me-1"></i>觀看影片';
-      contentBox.appendChild(boxTitle);
-      contentBox.appendChild(boxLink);
-      list.classList.add("historyList-item");
-      list.setAttribute('onclick', 'load_data()');
-      list.appendChild(divImgfr);
-      list.appendChild(contentBox);
-      historyList.appendChild(list);
-    }
-    document.querySelector('.loader').style.display = "none";
-  });
-}
-function closeNav() {
-  document.getElementById("mySidenav").style.width = "250px";
-}
-
-function view() {
-  event.stopPropagation();
-  console.log(event.target);
-  if(event.target.nodeName === 'I') {
-    return;
-  } else {
-    window.open(`http://${event.target.dataset.url}`, '_blank');
-  }
-}
+  xhr.onreadystatechange = function () {
+   if (xhr.readyState === 4) {
+      alert('請察看信箱')
+   }};
 
+xhr.send();
 
-function load_data() {
-  var title = document.getElementById("title");
-  var linker = document.getElementById("linker");
-
-  myModal.hide()
-  tid = event.srcElement.id
-  console.log(tid);
-  linker.setAttribute('href', `http://${loaded_data.find(item => item.id == tid).link}`)
-  linker.setAttribute('target', '_blank')
-  $("#linker").html(`http://${loaded_data.find(item => item.id == tid).link}`)
-  $("#linker").show();
-  $(".linker__box").show();
-
-  $(".title_new").val(loaded_data.find(item => item.id == tid).name)
-  var step;
-  for (step = 1; step <= 10; step++) {
-    $(".txtsrc" + step).val(loaded_data.find(item => item.id == tid).text_content[step - 1])
-  }
-  var step2;
-  for (step2 = 1; step2 <= 10; step2++) {
-    $(".imgsrc" + step2).val(loaded_data.find(item => item.id == tid).image_urls[step2 - 1])
-  }
-
-}
+});

+ 4 - 23
api/test.py

@@ -5,30 +5,11 @@ from passlib.context import CryptContext
 import time
 import mailer
 import first
-pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
 
-def get_password_hash(password):
-    return pwd_context.hash(password)
 
-code = str(time.time()).replace('.','')
-
-def reset_password1(code,user_id):
-    db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
-    db['reset_pw_code'].insert({'code':code,'user_id':user_id})
-    msg = '請至點擊網址以重設密碼 : https://www.choozmo.com:8887/reset_password?code='+code
-    msg =msg.encode(encoding='utf-8')
-    user_dict = next(iter(db.query('SELECT * FROM users where id ="'+str(user_id)+'"')))
-    mailer.send(msg, user_dict['email'])
-    return {'msg':'ok'}
-
-def reset_password2(code, pwd):
-    
+def get_id_by_email(email):
     db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
-    veri_obj = next(iter(db.query('SELECT * FROM reset_pw_code where code ="'+str(code)+'"')))
-    if veri_obj != None:
-        db['reset_pw_code'].delete(code=code)
-    val = db.query('UPDATE users SET password = '+'"'+get_password_hash(pwd)+'" where id ='+str(veri_obj['user_id']))
-    return {"msg": "ok"}
+    user_dict = next(iter(db.query('SELECT * FROM users where email ="'+email+'"')))
+    return user_dict['id']
 
-reset_password1(code,36)
-reset_password2(code,'mingming')
+print(get_id_by_email('ming@choozmo.com'))

BIN
api/util/__pycache__/user.cpython-38.pyc


+ 4 - 0
api/util/user.py

@@ -77,6 +77,10 @@ def get_user_id( username):
     db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
     return str(first(db.query('SELECT COUNT(*) FROM history_input WHERE user_id ='+str(user_obj['id'])))['COUNT(*)'])
     
+def get_id_by_email(email):
+    db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')
+    user_dict = next(iter(db.query('SELECT * FROM users where email ="'+email+'"')))
+    return user_dict['id']
 
 def email_veri_pass(name):
     db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/AI_anchor?charset=utf8mb4')