הודעות שפורסמו על ידי צדיק תמים
-
RE: שליחת מייל על ידי קוד PHP
@יודעלע כתב בשליחת מייל על ידי קוד PHP:
כלומר במסד יש שורות שממתינות והקוד רץ פעם בדקה ושולח אחד אחרי השני
הבעיה היא שפעם בדקה יוצא שכשיש 100 מקליטים חדשים ואני אמור לקבל מכל אחד מהם מייל זה יקח לפחות 100 דקותלמה יקח 100 דקות? יקח עד דקה + כמות זמן שלוקח לשלוח מייל כפול מספר הנרשמים
-
RE: אבטחה - באימות דו שלבי / דעתכם... 🪪💂🏻
@גלאט-מערכות כתב באבטחה - באימות דו שלבי / דעתכם... 🪪
:
עד היום היינו נכנסים עם כתובת URL הכוללת שם מערכת וסיסמה בטקסט פתוח – מה שמהווה סיכון אבטחתי, מכיוון שכל מי שיש לו גישה לשרת או ל-API יכול לראות את הסיסמה בקלות.
זה לא טקסט פתוח, הפרמטרים של הבקשה מוצפנים בHTTPS
מי שיש לו גישה לשרת יכול גם לקרוא את הסיסמה בזמן ההתחברות או ישירות מהדיסק
איך אפשר "לראות בקלות"? -
RE: אבטחה - באימות דו שלבי / דעתכם... 🪪💂🏻
@שמואל כדאי שתוסיפו אפשרות לעשות את האימות באמצעות sso של גוגל. כמעט כל המיילים בציבור הם של גימייל וזה יקל מאוד לעשות את האימות בלחיצה במקום לפתוח מייל, לחכות שהקוד יגיע, להעתיק, להדביק
-
RE: אבטחה - באימות דו שלבי / דעתכם... 🪪💂🏻
אם תהיה אופציה להנפקת טוקן קבוע זה לא נטל על הלקוחות, כי זה בדיוק כמו אם היה צריך להחליף סיסמת ניהול למערכת, פשוט במקום המספר:סיסמה יכניסו את הטוקן שינפיקו דרך האתר
אם יהיו חייבים לעבוד עם טוקנים זמניים זה בעיה
אני חושב שטוקן ארוך קבוע זה מספיק מאובטח לתקשורת שרת-לשרת, ודאי מספיק מאובטח כדי שימות תאפשר למי שמעוניין להסתפק בכך -
RE: העלאת קבצים גדולים בapi
@שלמה-צובל מצורף קוד תקין
import json import requests import os from uuid import uuid4 def read_in_chunks(file, chunk_size=5000000): while True: data = file.read(chunk_size) if not data: break yield data def upload_file(file_path, path, token_yemot): if os.path.getsize(file_path) > 5000000: content_name = str(os.path.basename(file_path)) content_path = os.path.abspath(file_path) content_size = os.stat(content_path).st_size qquuid = str(uuid4()) file = open(content_path, 'rb') chunks = [chunk for chunk in read_in_chunks(file)] file.close() offset = 0 for chunk in chunks: data = { 'token': token_yemot, 'path': path, 'qquuid': qquuid, 'convertAudio': 0, 'autoNumbering': 'true', 'uploader': 'yemot-admin', 'qqfilename': content_name, 'qqtotalfilesize': content_size, 'qqtotalparts': len(chunks), 'qqchunksize': len(chunk), 'qqpartbyteoffset': offset, 'qqpartindex': chunks.index(chunk), } files = { 'qqfile': chunk, } res = requests.post('https://www.call2all.co.il/ym/api/UploadFile', data=data, files=files, ) offset += len(chunk) response = requests.post('https://www.call2all.co.il/ym/api/UploadFile?done',{ 'token': token_yemot, 'path': path, 'uploader': 'yemot-admin', 'convertAudio': 0, 'autoNumbering': 'true', 'qquuid': qquuid, 'qqfilename': content_name, 'qqtotalfilesize': content_size, 'qqtotalparts': len(chunks), }) responses = response.text.split("}{") for idx, response in enumerate(responses): if idx < len(responses) - 1: response = f"{response}" else: response = f"{response}" try: data = json.loads(response) print(response.json()) return data except json.JSONDecodeError as e: print("JSON decoding error:", e) else: url = 'https://www.call2all.co.il/ym/api/UploadFile' params = { 'token': token_yemot, 'path': path, 'convertAudio': int(1), 'autoNumbering': int(1), } files = {'file': open(file_path, 'rb')} response = requests.post(url, params=params, files=files) print(response.json()) return response.json()
-
RE: yemot-router2
@שמואל-ש אני גם השתמשתי בעבר בpm2 לניהול תהליכים. כיום אני משתמש בdocker compose וגם caddy רץ בתוכו ואז אני לא מנהל בכלל פורטים אלא מאזין בכולם על פורט 80 וב Dockerfile כותב את שם השירות
-
RE: yemot-router2
@עידו כתב בyemot-router2:
שרת אפצ'/נג'ניקס (לא משנה באמת) + קאדי
לא צריך גם וגם
יש קובץ תצורה ובגלל שזה תחביר מאוד קצר ופשוט אין עניין בGUI -
RE: yemot-router2
@עידו קאדי לא מנהל שום דבר חוץ מרברס פרוקסי
כלומר שהוא מאזין בפורט 80/443 של השרת ומעביר בקשות לפורטים פנימיים לפי הדומיין -
RE: yemot-router2
@עידו כתב בyemot-router2:
@צדיק-תמים כתב בyemot-router2:
טיפ נוסף: אם מוסיפים בסוף הפקודה & היא ממשיכה לרוץ גם כשתתנתק מהשרת
הסקריפט ימשיך לרוץ או רק הפקודה שהתחילה?
כשאתה מריץ פקודת node a.js אתה מריץ תהליך בשם node שמריץ סקריפט a.js
ברגיל זה רץ תחת התהליך של השל הנוכחי כforeground job ולכן נהרג כשהאבא נהרג כלומר כשאתה מתנתק מהשרת, אם אתה מוסיף & בסוף, באובונטו לפחות, זה רץ כbackground job ולא נהרג כשהאבא נהרג@עידו כתב בyemot-router2:
@צדיק-תמים כתב בyemot-router2:
אני ממליץ בחום לעבור ל caddy server, תחביר הרבה יותר קל ופשוט
הוא נשמע טוב, אבל זה לא הרבה התעסקות בשביל פתיחת משתמשים/מאגר מידע/אבטחה?
יש לו הרבה יותר ברירות מחדל עדכניות ובטוחות ולכן צריך פחות להתעסק בלהגדיר כל דבר קטן
@עידו כתב בyemot-router2:
פתיחת משתמשים/מאגר מידע/אבטחה
לא הבנתי למה כוונתך
-
RE: yemot-router2
@עידו לא צריך גם pm2 וגם nodemon, יש לpm2 אופציה של watch
אני ממליץ בחום לעבור ל caddy server, תחביר הרבה יותר קל ופשוט
טיפ נוסף: אם מוסיפים בסוף הפקודה&
היא ממשיכה לרוץ גם כשתתנתק מהשרת -
RE: yemot-router2
@עידו מה הכלי הזה שאתה עובד דרכו?
למה לא בדרך הרגילה להתחבר לשרת בSSH ולהריץ? -
RE: yemot-router2
@עידו ואז תמיד תצטרך לבקש ממני? למה שלא תנסה להבין את התחביר? זה סך הכל 2 שורות
-
RE: yemot-router2
@עידו בדרך כלל דווקא לא עושים ככה אלא מאזינים בתוך השרת על פורט גבוה כלשהוא (האזנה לפורטים מתחת 1024 מצריכה הרצה כמנהל) ומשתמשים ברברס פרוקסי כמו nginx כדי לייצא את זה על פורט 80/443 לפי דומיין
-
RE: yemot-router2
@עידו לא תקין מאיזו בחינה?
אין בזה שום בעיה טכנית. אתה יכול לשנות בקוד/ברברס פרוקסי לפורט 80 אם ממש מפריע לך המראה של המספרים בסוף