מערכת פשוטה להצבעה אנונימית עבור דיירי הבניין.
- Go 1.21 ומעלה
- חשבון Google Cloud עם Firestore מופעל
-
התקן את Go מהאתר הרשמי: https://golang.org/dl/
-
הגדר פרויקט ב-Google Cloud:
- צור פרויקט חדש או השתמש בקיים
- הפעל את Firestore במצב Native
- הגדר הרשאות מתאימות
-
התקן את Google Cloud CLI:
- macOS (עם Homebrew):
brew install google-cloud-sdk - Linux/Windows: הורד מ-https://cloud.google.com/sdk/docs/install
- macOS (עם Homebrew):
-
התחבר ל-Google Cloud:
gcloud auth application-default login
-
הורד את הקוד:
git clone [URL-של-הריפוזיטורי] cd poll -
התקן את התלויות:
go mod tidy
-
הגדר משתני סביבה:
# הגדר את מזהה הפרויקט ב-Google Cloud export GOOGLE_CLOUD_PROJECT="your-project-id" # הגדר את מועד סיום ההצבעה (אופציונלי, ברירת מחדל: 1 באפריל 2024 בשעה 23:59:59) export POLL_END_TIME="2024-04-01 23:59:59"
-
הפעל את השרת:
go run main.go
-
גש לכתובת הבאה בדפדפן:
http://localhost:8080
GOOGLE_CLOUD_PROJECT: מזהה הפרויקט ב-Google CloudPOLL_END_TIME: מועד סיום ההצבעה בפורמט "YYYY-MM-DD HH:mm:ss"- דוגמה:
2024-04-01 23:59:59 - ברירת מחדל:
2024-04-01 23:59:59
- דוגמה:
PORT: פורט להפעלת השרת- ברירת מחדל:
8080
- ברירת מחדל:
המערכת מבטיחה אנונימיות מוחלטת של ההצבעות באמצעות מספר מנגנונים:
- המערכת משתמשת בשני אוספים (collections) נפרדים ב-Firestore:
- אוסף דירות (
apartments): מכיל רק את מספר הדירה ושם המצביע - אוסף הצבעות (
votes): מכיל רק את ההצבעות עצמן, ללא קשר לדירות
- אוסף דירות (
- כל הצבעה מקבלת מפתח אקראי בעת ההוספה
- סדר ההצבעות אקראי לחלוטין ואינו מושפע מסדר ההצבעה
- לא ניתן לקשר בין הצבעה לדירה ספציפית גם אם יש גישה למסד הנתונים
- כשדייר מצביע, המערכת:
- בודקת שהדירה לא הצביעה עדיין
- מוסיפה את פרטי הדירה לאוסף הדירות
- מוסיפה את ההצבעה לאוסף ההצבעות עם מפתח אקראי
- כל הפעולות מתבצעות בטרנזקציה אחת להבטחת עקביות
- התוצאות מוסתרות לחלוטין עד לסיום ההצבעה
- לא ניתן לראות תוצאות ביניים
- התוצאות מתפרסמות רק לאחר המועד שנקבע מראש
- לא ניתן לשחזר את ההצבעה של דירה מסוימת גם בגישה ישירה למסד הנתונים
- המערכת לא שומרת לוגים או מידע נוסף שיכול לחשוף את זהות המצביעים
- ניתן לראות אילו דירות הצביעו (אך לא מה הצביעו)
- כל דירה יכולה להצביע פעם אחת בלבד
- שם המצביע נשמר רק לצורך וידוא שלא תהיה הצבעה כפולה
- במקרה שכל ההצבעות או רובן המוחלט זהות, ניתן להסיק את כיוון ההצבעה של רוב המצביעים
לשאלות ותמיכה טכנית, צור קשר עם מנהל המערכת.