https://mitmachim.top/post/699834
שים לב לשרשור שם.
https://mitmachim.top/post/699834
שים לב לשרשור שם.
@מוטי-מן כתב בעזרה לקוד אסינכרוני בnodejs:
אני משתמש בספריה לתקשורת עם ימות המשיח בnode, ובקטע הזה, הmessage נשלח לימות ריק, היינו אני לא שומע את ההודעה, אבל זה כן נותן לי את אפשרויות ההקשה,
if (isAir != false) { var message = ''; if (isAir.length > 1) { message = `יש לכם ${isAir.length} אסימונים פעילים לחצו על 1 להשמעה חוזרת ו 2 ליציאה`; } else if (isAir.length === 1) { message = 'יש לכם אסימון אחד לחצו על 1 להשמעה חוזרת ו 2 ליציאה'; } else { console.log('No matching rows found'); } console.log('message', message); const choiceAction = await call.read([{ type: 'text', data: message }], 'tap', { max_digits: 1, digits_allowed: [1, 2], allow_empty: false, sec_wait: 8 }); console.log('choiceAction', choiceAction); }
אני חושב שזה בגלל האסינכרוניות, למרות שההדפסה לקונסול כן יוצאת תקינה, איך אני מוודא שרק לאחר סיום הif תתבצע הקריאה לread?
(אני מכיר קצת קולבקים אבל לא הבנתי איך להכניס את זה במקרה הזה בלי להשתמש בעוד פונקציות)
מה כתוב בלוג api של ימות המשיח?
שמה הם קיבלו ממך, איזה תשובה?
@מוטי-מן כתב בלינוקס אבונוטו קבלת נתונים משרת מרוחק באמצעות VPN של Fortinet/הרצת תהליך קבוע:
@צבי-ש אבל אז אני יהיה מוגבל למבנה התיקיות הנוכחי..
יש דרך לקבל את התיקייה שבה נמצא קובץ הjs?עריכה: שאלתי את ג'י פי טי, וזה מה שהוא הביא לי, אנסה בהמשך בעז"ה
אני לא זכרתי בע״פ אז חיפשתי בגוגל
״get path in nodejs״
וזה התוצאה הראשונה
https://stackoverflow.com/questions/3133243
@מוטי-מן כתב בעזרה בהפעלה של דוקר על ubuntu עבור פרויקט בnode:
@צבי-ש כתב בעזרה בהפעלה של דוקר על ubuntu עבור פרויקט בnode:
המקום שבו הסתבכתי זה בהפעלה/יצירת התמונת דוקר שאותה אני אוכל להריץ,
מה הסתבכת?
אם אני רוצה להפעיל nodejs שמשתמש במודול כמו אקספרס והספריה לימות המשיח ועוד כמה, איך אני בוחר/יוצר את האימאג' שממנו אריץ את הקונטיינר? זה צריך לכלול רק נוד, או שגם את המודולים שאני רוצה להשתמש בהם?
dockerfile הוא הקובץ שאחראי על היצירה.
אתה יכול לציין מפורש בתוכו להתקין מספר ספריות, או להכין מראש קובץ package.json עם הספריות, ואז להכין קובץ כזה למשל
FROM node:18
WORKDIR /app
COPY package.json /app
RUN npm install
אתה נותן לו פקודת COPY
ואחרי שהקובץ בפנים, אתה עושה npm install והוא מתקין את הכל.
תוכל גם לעשות ככה למשל
RUN npm install express
בשביל להתקין את express
@מוטי-מן כתב בלינוקס אבונוטו קבלת נתונים משרת מרוחק באמצעות VPN של Fortinet/הרצת תהליך קבוע:
@צבי-ש לא, זה ללא "/" בכלל, זה קובץ שממוקם באותה תיקייה של הindex.js
תנסה לציין לו את הנתיב המלא.
const filePath = '/var/www/node/authorized_numbers.ini';
@מוטי-מן כתב בעזרה בהפעלה של דוקר על ubuntu עבור פרויקט בnode:
המקום שבו הסתבכתי זה בהפעלה/יצירת התמונת דוקר שאותה אני אוכל להריץ,
מה הסתבכת?
והאם או כיצד היא צריכה להכיל את קבצי הפרויקט,
תלוי בצורך, לרוב אתה עושה פשוט copy לבפנים,
כמו פה בשורה 3 שזה מעביר את כל התיקייה
או כמו בשורה 4 אתה מעתיק רק את קובץ app.js,
FROM node:18-alpine
WORKDIR /app
COPY . .
COPY app.js app.js
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
ומה אני עושה אם יש קבצים שמשתנים תוך כדי ריצה, כיצד השינויים נשמרים גם לאחר כיבוי המיכל.
אתה צריך להגדיר Volume תיעוד שבעצם גורם לשיתוף בין תיקייה לוקאלית אצלך, לבין תיקייה בקונטיינר, ואז אם תשמור שם קבצים, זה יישמר לאחרי זה.
@מוטי-מן כתב בלינוקס אבונוטו קבלת נתונים משרת מרוחק באמצעות VPN של Fortinet/הרצת תהליך קבוע:
@dovid תודה, בדיוק הייתי צריך את זה גם
אבל יש לי בעיה, יש לי שורה בקוד שקוראת את התוכן של קובץ מסויים מהתיקייה בשרת
const fileContent = fs.readFileSync(filePath, 'utf-8');
ובשורה הזו הקוד נופל (בדקתי וזה עובד מצוין ללא זה), ובאופן הרגיל זה כן עובד עם זה, מה יכול להיות הבעיה?
ברגיל אני מריץ את זה כמשתמש ubuntu, וככה הגדרתי (גם לי זה עשה כמה שגיאות עד שהצלחתי ללמוד איך להפעיל את זה ב"ה )
[Unit] Description=node app Service [Service] ExecStart=/home/ubuntu/.nvm/versions/node/v14.17.0/bin/node /var/www/node/index.js Restart=always RestartSec=10 SyslogIdentifier=short-name-for-logs User=ubuntu [Install] WantedBy=multi-user.target
ה filePath שכתבת, הוא נתיב ביחס לתיקייה או ביחס לכל השרת?
(האם הוא
${filePath}/var/www/node/
או
/${filePath}
)
@מעמד-מוצלח כתב בקוד גוגל סקריפט להעברת מיילים לפי תווית:
https://tchumim.com/topic/10610/סקריפט-גוגל-להגדרת-כתובת-להעברה
שלום וברכה אני מעונין בקוד שיעבור על תיבת המייל ויראה אם יש הודעות עם תווית מסויימת ואם כן ישלח אותם כולל הכל: שם שולח, תוכן ההודעה, נושא, וקבצים מצורפים
בשמי למייל השני
אשמח לכל התחלה של קוד כזה , תודה רבה
כתבת בקטגוריית תכנות, לא בקטגוריית דרושים,
אני מניח שהתחלת לתכנת את זה?
איזה שפה חשבת לעשות את זה?
מה התחלת לעשות?
מה יש לך?
איפה נתקעת?
אופציה אחרת שאולי אפשרי לנסות, זה לא לתת גישה, ולראות במייל מה לא נשלח אליו או נשלח רק לינק בלי התמונה עצמה
@dovid כתב בhtml לחיץ אבל גם שיאפשר בחירה:
אני לא יכול לבדוק מה יש בספריא בגלל נטפרי (אולי תתאר לי במילים),
סליחה על המענה המאוחר, אני השתמשתי בפיתרון ש @ivrtikshoret כתב פה,
עבד לי מעולה, ערכתי את הפונקציה שתתאים גם לקבצים קטנים יותר.
const readInChunks = (filePath, chunkSize = 5000000) => {
const file = fs.readFileSync(filePath);
const chunks = [];
for (let offset = 0; offset < file.length; offset += chunkSize) {
const chunk = file.slice(offset, offset + chunkSize);
chunks.push(chunk);
}
return chunks;
};
export const uploadFileInYemot = async (filePath, path, tokenYemot) => {
const fileSize = fs.statSync(filePath).size;
const contentName = filePath.split('/').pop();
if (fileSize <= 5000000) {
const formData = new FormData();
formData.append('token', tokenYemot);
formData.append('path', path);
formData.append('convertAudio', 1);
formData.append('autoNumbering', 1);
formData.append('file', fs.readFileSync(filePath), {
filename: contentName,
contentType: 'application/octet-stream',
});
const response = await fetch('https://www.call2all.co.il/ym/api/UploadFile', {
method: 'POST',
body: formData,
});
return await response.json();
} else {
const chunks = readInChunks(filePath);
const qquuid = uuidv4().toString();
for (let i = 0; i < chunks.length; i++) {
const chunk = chunks[i];
const formData = new FormData();
formData.append('token', tokenYemot);
formData.append('path', path);
formData.append('qquuid', qquuid);
formData.append('convertAudio', 0);
formData.append('autoNumbering', 'true');
formData.append('uploader', 'yemot-admin');
formData.append('qqfilename', contentName);
formData.append('qqtotalfilesize', fileSize);
formData.append('qqtotalparts', chunks.length);
formData.append('qqchunksize', chunk.length);
formData.append('qqpartbyteoffset', i * chunk.length);
formData.append('qqpartindex', i);
formData.append('qqfile', chunk, {
filename: contentName,
contentType: 'application/octet-stream',
});
const response = await fetch('https://www.call2all.co.il/ym/api/UploadFile', {
method: 'POST',
body: formData,
});
const responseData = await response.json();
console.log(responseData);
}
const finalFormData = new FormData();
finalFormData.append('token', tokenYemot);
finalFormData.append('path', path);
finalFormData.append('uploader', 'yemot-admin');
finalFormData.append('convertAudio', '0');
finalFormData.append('autoNumbering', 'true');
finalFormData.append('qquuid', qquuid);
finalFormData.append('qqfilename', contentName);
finalFormData.append('qqtotalfilesize', fileSize);
finalFormData.append('qqtotalparts', chunks.length);
try {
const response = await fetch('https://www.call2all.co.il/ym/api/UploadFile?done', {
method: 'POST',
body: finalFormData,
});
const responseData = await response.text();
console.log(responseData);
} catch (error) {
console.error("Error during the fetch:", error);
}
}
};
תודה לכל העוזרים.
נ.ב. תודה למי שפנה אליי באישי והאיר לי על הנושא.
@ששא כתב בכיצד ניתן למנוע השבתת אתר בשל תקלה בשרת?:
@חוקר התקנתי, וזה אכן נראה פצצה, אבל משום מה נהיה לי כל הזמן
מה זה?
התקנתי עם הפקודה הזאת
תפתח על זה נושא חדש
@dovid כתב בהעלאת קובץ בapi לימות המשיח | קוד שבפייתון עובד וב nodejs לא כל כך:
קובץ בודד
אתה מתכוון פחות מ50 מגה?
כי ניסתי קובץ גדול והיה שגיאה
@dovid כתב בהעלאת קובץ בapi לימות המשיח | קוד שבפייתון עובד וב nodejs לא כל כך:
קיבלתי את הקוד מ@צבי-ש ויש שגיאה מצד ימות, עם הודעה Syste, error, וmessageCode 105.
בקוד המקורי שהעלתי פה אין שגיאה כזאת, אלא על כל חלק וחלק אני מקבל תשובה שהכל תקין, וגם בסוף שעלה בסדר, שולח גם את הנתיב של הקובץ, אבל מעלה אותו עם 0kb
מה שיוצר לי תחושה כאילו אני סתם מחלק את הקובץ לחלקים, כשבפועל בכל קריאה אני מעלה 0kb
(תוכל לראות בשלוחה 1 שם קובץ כזה)
אני מנסה להעלות קובץ גדול מ50 מגה אל ימות המשיח לפי התיעוד כאן
יש לי קוד פייתון שכתב לי בזמנו @צדיק-תמים שמעלה תקין את הקובץ, מחלק אותו לחלקים של 50 מגה ומעלה אותם לימות המשיח, בסיום הוא מאחד את הקבצים, והכל עולה תקין.
ניסתי לשכתב אותו בnodejs , וזה נראה שהוא באמת מעלה את החלקים, אבל בתגובה, וכן במערכת עצמה, הקובץ שוקל 0 kb .
לא ראיתי פה דרך לשים בספוילר את הקודים, אז אני מעלה את הקבצים עצמם, שלא יכביד על העין סתם שורות קוד.
זה הקוד פייתון המקורי , שעובד upload.py
זה הקוד nodejs , שלא עובד טוב test.js
אם מישהו רוצה לבדוק את זה וצריך טוקן מימות המשיח, שישלח לי מייל בפרטי, ואשלח לו טוקן.
@טוב-להודות כתב בקבצי ימות המשיח, הגנה על הטוקן:
הפחד שלי היה שעדיין מישהו יראה את הנתיב נשלח לקובץ שמוריד
וינסה לשלוח נתיבים אחרים להורדה
אם אתה תקבל נתיב, ואותו תוריד דרך השרת שלך, עדיין הוא יוכל להוריד את כל המערכת בעיקרון
זה לא יפתור את הבעיה הזאת
@טוב-להודות כתב בקבצי ימות המשיח, הגנה על הטוקן:
אני רק מבהיר הפחד הגדול שלי הוא ממתכנתים
בגדול אבטחתי כמעט את כל המערכת וזה הנקודה שאני עוד לא שלם איתה
אפשר הסבר איזה סוג מערכת אתה בונה?
ולמה אתה אמור לפחד ממתכנתים ?
@דאטה-בייס כתב בנסיון פריצה לשרת שלי?:
בהמשך לנ"ל,
בזמנו, כעזרה ראשונה, סגרתי ישירות את כל הכתובת IP ואפשרתי רק את שלי
כעת אני כן צריך במידע מסויימת לאפשר גם לכתובות אחרות לגשת
אז דבר ראשון, אשמח להבהרה בנוגע למה שכתב @חגי , למה באמת אין לי מה לחשוש, בהנחה שיש לי שם מידע רגיש שאסור בשום אופן שיזלוג, האם אני לא אמור לחשוש?
כמו"כ, איך מיישמים את מה ש @dovid כתב "אתה צריך לסגור הכל, ומה שצריך להיות פתוח לחשוב טוב האם אין דרך בעולם להגיע משמה למידע/פקודה לא רצויה", יש לי המון urls שהגדרתי (פרוייקט django), האם מישהו יכול להפנות אותי למידע אודות שיטות אבטחה \ כללים בנוגע לפתיחת שירותים, ובקיצור, איך להבטיח שהשירותים שאני פותח (היינו הurls הזמינים) יהיו מאובטחים ולא יוכלו בשום דרך לעקוף
אני חושב ש dovid התכוון לא רק לurlים אלא לכל שירות שרץ בשרת, כולל פורטים וכו׳ שלא יהיו סתם פתוחים אם אין צורך
לגבי הפרויקט שלך, האופציה הבסיסית לאבטח זה שיצטרכו טוקן כלשהוא כדי לגשת / לערוך / לשלוח מידע, ובלי הטוקן או אם הוא לא תקין, אתה מחזיר שגיאה, ולא מבצע שום פעולות,
פה אתה יכול לעשות סתם טוקן (גיבריש כלשהוא של אותיות , ספרות, ותווים) או משהו מסודר יותר עם יוזרים שניגשים, ולכל אחד טוקן שונה, כדי שתוכל לעקוב מי ביקש מה וכו׳
אם זה צריך להיות פתוח לכולם ללא טוקן (למשל סתם אתר או משהו בסגנון) אתה חייב לאבטח שלא יוכלו להגיע משם למידע שאתה לא רוצה להגיש , (לחסום אינדקסים מיותרים, ולמשל אם אתה מכניס מידע, לבדוק טוב שלא יזריקו לך מידע שאתה לא רוצה פנימה.)
במחשבה שניה, גם אם אתה מנהל יוזרים וכו׳ אתה צריך לחסום אופציה להזריק או להכניס נתונים שאתה לא מעוניין בהם..
זה בגדול מה שאני עושה, אשמח גם לשמוע ולהחכים פה מהאנשים מה עוד אפשרי לעשות