diff --git a/.env b/.env index 67b5888..b178225 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ APP_SIGNATURE = fcsc.gov.ae.X7pL9qZm2A -LIVE_BASE_URL = https://pb.venbait.in +LIVE_BASE_URL = https://pocket.fcsc.gov.ae BASE_URL = http://127.0.0.1:8090 diff --git a/firebase-adminsdk-old.json b/firebase-adminsdk-old.json new file mode 100755 index 0000000..c0c3bbe --- /dev/null +++ b/firebase-adminsdk-old.json @@ -0,0 +1,14 @@ +{ + "type": "service_account", + "project_id": "fcsc-a161c", + "private_key_id": "3660545901d4b2f8c2413d8643933dc941a51ea8", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC/WXF6EXdOVrKE\n2tExjsyWi1HCmganKM78DACYoxsNddN/vI9ptqijS/I9nPJ4dKb+bmkdUDq3c5Vf\nFkh1KrAVknKAWHz938eZiXz8P5FwTx0yP9SnBYp3MsSZ8ZGalAY8bsOf3SC2IGnU\nAdcv8TQPm39Br84TSV+5dwUljwTn2SxmjCrkvL/7MRHELvFsNGG6GyXQA9uTHq+K\nWtZ5vqSYerAg1+Lnven78nnpvtk9D+dCr17Y5x+Z0+V9dLYhXDlRFZFClvoC/Vws\n9ZeSKtYwo2KPq9f5IEfpo5SonES1Fen2iwlRr3PTuHP9iEC2XyjBcWo5X4ts7D4z\nJJ7WP/3HAgMBAAECggEAJISx8v19Wv6R0Gggb4hUxFBveKfDqEhSBGlX/cl3IsD/\nbcvzRNYe5hda8mZPIi0FJ96zgewrYJKXCdArYO0WMO/DmXoJ1LvOEJ/cMhoBrED1\nDf9/mqakj+4o9kZTpwAkFol/HTXrBcc220bEpjou2OGwzjz6o9Snh7JO0aWzZnnH\n4/h9ycIOffMdf4HCJ3StJYQ/mITOhgauFy5kKfx+7BNnS0pbA1DHSuP3EaqqloSn\nzPoIMkmalVroOjq7CV5gxUfPpEU8n0nZMmpSnk9bxh04bipJNPOSlve8+sx4FKs3\nlK6L4KBEnos+GMqCSQyFbdsQ3YHJSQF4fU0FFiLWWQKBgQDsmPoAK3rOO8fvK25R\nTEkK0zPAUCwGqGx7XeWdPK7f1pzx30J2+gCz8ZsvU6OnZt7JH9cnTdyIqf7dMMT+\ndRsRHjrkY7aldrM8FLCoK9XIjl6BPsbK2Bl4EeWo0SsWWQJDPC5UGmSdlgCADqvZ\ntrVpx3bAsdtVAxDKo9kHa40u3wKBgQDPCov1ukYf9rO4eBSpo0Y8CL07DdmhyrYM\nogO+VRZhq+2o1S7+sv2kKdsijxyXbKfDNz59mPvle4jmqxWZr4VXploUBBltWrej\nYSzFtuoD/n8pO06dvSNvZeTKYEe0qoDCdB1EV90dWYwZD5DyT5/J9b4QIe6bpq6b\nUq4QYLjWGQKBgArkS/YACmo+FEktXam+ckpeSK6cwjoYPM49F1nytjY1wgncdknV\n3nxqLfOyzQDi2nS104jKq9FayhHSse7o4zMZiiqDcKATY9LrPOqxAel2rGEUy8AA\nzMNbR5BK+MnRlSoVNijHAkTC6Aj9I+ok4BsbhJsAVRGHz5kUi+QsjlZPAoGAY2PX\nvnXWlh+TNRoIKUtlOwqi9Md4U1ABxty72VH1dZvYcjUs4z4/vuAM/3EeM58IhhFu\nIVMgkZCVLs6wht+YrnQASB2Tq0hiYb8ThDKD8rjoiH2dBuI2MZMDmxdPNO6o8zBU\noGthjWZgd+NeHMSWm5gpzorLhdMlfRDa2Kfl83kCgYEAkewjSqqUrYeFk9Bt02Vc\nwK3kxsanKOXutpdqDIwzSkzTJPgfMQPFI9I3SkjKgLaXZWFoT62o+XIOu2M0WnkR\nIhOSYSNQGK54Bbt2S6foosY72gcSLkzLb/W2K0uhygCATKE6FV+gq9seLeei7nhe\nXkRwkd9LZkEdjN/raXYg6eE=\n-----END PRIVATE KEY-----\n", + "client_email": "firebase-adminsdk-fbsvc@fcsc-a161c.iam.gserviceaccount.com", + "client_id": "100047472401187709093", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-fbsvc%40fcsc-a161c.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" + } + \ No newline at end of file diff --git a/firebase-adminsdk.json b/firebase-adminsdk.json index c0c3bbe..ba3ad1e 100755 --- a/firebase-adminsdk.json +++ b/firebase-adminsdk.json @@ -1,14 +1,13 @@ { - "type": "service_account", - "project_id": "fcsc-a161c", - "private_key_id": "3660545901d4b2f8c2413d8643933dc941a51ea8", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC/WXF6EXdOVrKE\n2tExjsyWi1HCmganKM78DACYoxsNddN/vI9ptqijS/I9nPJ4dKb+bmkdUDq3c5Vf\nFkh1KrAVknKAWHz938eZiXz8P5FwTx0yP9SnBYp3MsSZ8ZGalAY8bsOf3SC2IGnU\nAdcv8TQPm39Br84TSV+5dwUljwTn2SxmjCrkvL/7MRHELvFsNGG6GyXQA9uTHq+K\nWtZ5vqSYerAg1+Lnven78nnpvtk9D+dCr17Y5x+Z0+V9dLYhXDlRFZFClvoC/Vws\n9ZeSKtYwo2KPq9f5IEfpo5SonES1Fen2iwlRr3PTuHP9iEC2XyjBcWo5X4ts7D4z\nJJ7WP/3HAgMBAAECggEAJISx8v19Wv6R0Gggb4hUxFBveKfDqEhSBGlX/cl3IsD/\nbcvzRNYe5hda8mZPIi0FJ96zgewrYJKXCdArYO0WMO/DmXoJ1LvOEJ/cMhoBrED1\nDf9/mqakj+4o9kZTpwAkFol/HTXrBcc220bEpjou2OGwzjz6o9Snh7JO0aWzZnnH\n4/h9ycIOffMdf4HCJ3StJYQ/mITOhgauFy5kKfx+7BNnS0pbA1DHSuP3EaqqloSn\nzPoIMkmalVroOjq7CV5gxUfPpEU8n0nZMmpSnk9bxh04bipJNPOSlve8+sx4FKs3\nlK6L4KBEnos+GMqCSQyFbdsQ3YHJSQF4fU0FFiLWWQKBgQDsmPoAK3rOO8fvK25R\nTEkK0zPAUCwGqGx7XeWdPK7f1pzx30J2+gCz8ZsvU6OnZt7JH9cnTdyIqf7dMMT+\ndRsRHjrkY7aldrM8FLCoK9XIjl6BPsbK2Bl4EeWo0SsWWQJDPC5UGmSdlgCADqvZ\ntrVpx3bAsdtVAxDKo9kHa40u3wKBgQDPCov1ukYf9rO4eBSpo0Y8CL07DdmhyrYM\nogO+VRZhq+2o1S7+sv2kKdsijxyXbKfDNz59mPvle4jmqxWZr4VXploUBBltWrej\nYSzFtuoD/n8pO06dvSNvZeTKYEe0qoDCdB1EV90dWYwZD5DyT5/J9b4QIe6bpq6b\nUq4QYLjWGQKBgArkS/YACmo+FEktXam+ckpeSK6cwjoYPM49F1nytjY1wgncdknV\n3nxqLfOyzQDi2nS104jKq9FayhHSse7o4zMZiiqDcKATY9LrPOqxAel2rGEUy8AA\nzMNbR5BK+MnRlSoVNijHAkTC6Aj9I+ok4BsbhJsAVRGHz5kUi+QsjlZPAoGAY2PX\nvnXWlh+TNRoIKUtlOwqi9Md4U1ABxty72VH1dZvYcjUs4z4/vuAM/3EeM58IhhFu\nIVMgkZCVLs6wht+YrnQASB2Tq0hiYb8ThDKD8rjoiH2dBuI2MZMDmxdPNO6o8zBU\noGthjWZgd+NeHMSWm5gpzorLhdMlfRDa2Kfl83kCgYEAkewjSqqUrYeFk9Bt02Vc\nwK3kxsanKOXutpdqDIwzSkzTJPgfMQPFI9I3SkjKgLaXZWFoT62o+XIOu2M0WnkR\nIhOSYSNQGK54Bbt2S6foosY72gcSLkzLb/W2K0uhygCATKE6FV+gq9seLeei7nhe\nXkRwkd9LZkEdjN/raXYg6eE=\n-----END PRIVATE KEY-----\n", - "client_email": "firebase-adminsdk-fbsvc@fcsc-a161c.iam.gserviceaccount.com", - "client_id": "100047472401187709093", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://oauth2.googleapis.com/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-fbsvc%40fcsc-a161c.iam.gserviceaccount.com", - "universe_domain": "googleapis.com" - } - \ No newline at end of file + "type": "service_account", + "project_id": "fcsc-uae-stats-9cb1e", + "private_key_id": "b1944c2fa5dd344d5c0f0b8b860d4a1dbd655939", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCd8sShEI4WCm92\nWbFEjdasqp/ZvMTP132vO0aApiXKqXea8LNgk+SSix5r4XDxz7VN0yRhkKl/oFKB\n93n5X6kt2ewVzJZT4e4UB8OAK1JS6Sir5g82f3hbTX2p4WY0jyo+FOe3I+hpiw1v\nKyQpuksPplHZKsyIenlvSFxMwW628OZTzsIQGGRrRznyrifC9dc8FUyU+Lfk8SpJ\nzjNbgilhufqUlbworQ+Bm+RzM+Fg5JsxRDw8PVB8mtj54+R761MDs5glYD91S8q+\nlM21rCF2HnKHVH5ojAeUVZv0rgP9pPoKtCNdv0BLcPyPs72REPc6mHJePe/fSknQ\nd+iTVy9dAgMBAAECggEAC4IPr4iMQbDa9C2Oy+bluEjqQqwNTvNtdeIEvgTdBgoY\n69ITz7qW0dKPEd8oIoY2uIfkw7MNln3w5QVJ/tBofC2/lMsGPPBeL1ltdh4x7laM\nnxGxFBBvjX9043bHwpaXxlQxmddk7KO0A+CJzvyC0Y4VspP6uQrrZB9KklEZpvyD\nAg0hEjOjyx0AHyniQ4iJo2ltb1GFHobHeLmuetbYGiefJNBfxp1AQ2ZaovZz5rkm\nqNOQ2mkB3VZ9VPg1pzaLGc4re79bC6pSOZGRZVgvrViRodIL5eHkv61oX0aQnnr0\n8wrUO5nM8qcsJPTZlEuRf7AP5nq+vNQ06fgTXQI94QKBgQDU4zuQEzlGJ1cQHuUZ\nVM7WF4KdDLWlooT/sFSlQRM7rTfW7Fr7cajrnpqXZlBHJCuve4nLcEyK8jcxKwtE\nQe6dCeUkFGZWvAy8W9TIE8oxKHvNR2kR/ulTYxFfHi72iJwIoa8bLvn7TzNE0Aex\nu+R9pGNt1HEuLBNMq28I06TBKQKBgQC9707HcR59EM2EXr+0ci8XO+QT6Jsv2eIq\n8p/SzoAkLO/eQlZ+Ezp0zousTYqBdXEPM93Xkr5Ot3Vdh6xctKRk5Rj1mUSaO9Ot\nFbhNvvaGVhfKRmyJoqMLmpta/DB2UifodPy1D2fLGYHRDARDh0RKO63UNE6KgIAT\nmVIlAwB/FQKBgE5lV5vY2HCTMCaJmghYCMsiYUEAWywhyyR1hNZOPoztXvDQnTiX\nRINwJrG2Rb3M/iFjNv0p36YTSGvc1AtQ1FQUPsOol389RNtgXd1IHF85701LDNBJ\ntRa2FsGWVekHqZ4sHFXAWOJI6jJfAVZcQOpbzRm27+724CyNvRfdCIDxAoGAU0Wh\nN2XL5S9Bu6BC0l0hckFKzMO1jjQrqYK4OZdZrQKao8pX22yYu2924zMX34xa5jxq\nLcJjd2WNqlT6Z6a3UJj06XCqGCjUtFUKeeOYd+s1APUBTxKkA0lkhW593NJGNu9b\ngBJiAjSLqthm4ihi81zY6GmKacTO4kjdL+byB8UCgYBdZQPCxq5jXw48AQGGmpoW\nyO7UQeWoFqw4RiSCyqzmymJHlB3Uq8leIABPML8uyp7IAl6UFE0As4n8AGhCrp2L\nwthxEpVHU0j8J4fre39ulz5gm34SKKnMwD+nxzvr4Xx7FWPcZCKTuKZXxzeqWEbu\n9SJUF4auw4x/l/GgtqVBag==\n-----END PRIVATE KEY-----\n", + "client_email": "firebase-adminsdk-fbsvc@fcsc-uae-stats-9cb1e.iam.gserviceaccount.com", + "client_id": "112238772816806612469", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-fbsvc%40fcsc-uae-stats-9cb1e.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} diff --git a/main.go b/main.go index 60bb2d4..93180e7 100755 --- a/main.go +++ b/main.go @@ -478,7 +478,6 @@ func main() { } var baseUrl = os.Getenv("BASE_URL") - var liveBaseUrl = os.Getenv("LIVE_BASE_URL") app = pocketbase.New() @@ -1702,6 +1701,64 @@ func main() { }) + e.Router.POST("/api/checkUserWithUhid", func(c echo.Context) error { + + type RequestData struct { + Email string `json:"email"` + UUID string `json:"uuid"` + } + + var requestData RequestData + + // Bind JSON request to struct + if err := c.Bind(&requestData); err != nil { + return c.JSON(http.StatusBadRequest, map[string]string{ + "error": "Invalid request format", + }) + } + + // Validate required fields + if requestData.Email == "" || requestData.UUID == "" { + return c.JSON(http.StatusBadRequest, map[string]string{ + "error": "email and uuid are required", + }) + } + + // Try to find user by UUID (emiratesid) + user, err := e.App.Dao().FindFirstRecordByData("users", "emiratesid", requestData.UUID) + if err == nil && user != nil { + return c.JSON(http.StatusOK, map[string]interface{}{ + "status": "success", + "message": "User found by UUID", + }) + } + + // If UUID not found, try to find by email + userByEmail, err2 := e.App.Dao().FindFirstRecordByData("users", "email", requestData.Email) + if err2 != nil || userByEmail == nil { + return c.JSON(http.StatusOK, map[string]interface{}{ + "status": "failed", + "message": "User not found", + }) + } + + // Update UUID (emiratesid) using email-found record + userByEmail.Set("emiratesid", requestData.UUID) + if err := e.App.Dao().SaveRecord(userByEmail); err != nil { + return c.JSON(http.StatusInternalServerError, map[string]interface{}{ + "status": "error", + "message": "Failed to update UUID for existing user", + "error": err.Error(), + }) + } + + // Return success after update + return c.JSON(http.StatusOK, map[string]interface{}{ + "status": "success", + "message": "User found by email and UUID updated successfully", + }) + }) + type DownloadRequest struct { Username string `json:"username"` Password string `json:"password"` @@ -1721,7 +1778,7 @@ func main() { Records []map[string]interface{} `json:"records"` } - e.Router.POST("/api/downloadWithLogin", func(c echo.Context) error { + e.Router.POST("/api/syncFromVIT", func(c echo.Context) error { reqBody := new(DownloadRequest) if err := c.Bind(reqBody); err != nil { return c.JSON(400, map[string]string{"error": "invalid request"}) @@ -1738,7 +1795,7 @@ func main() { } data, _ := json.Marshal(loginPayload) - loginReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/api/admins/auth-with-password", baseUrl), bytes.NewBuffer(data)) + loginReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/api/admins/auth-with-password", "https://pb.venbait.in"), bytes.NewBuffer(data)) loginReq.Header.Set("Content-Type", "application/json") loginResp, err := http.DefaultClient.Do(loginReq) @@ -1759,7 +1816,7 @@ func main() { } // 2️⃣ Use token to fetch records - url := fmt.Sprintf("%s/api/collections/%s/records?perPage=500", baseUrl, reqBody.Collection) + url := fmt.Sprintf("%s/api/collections/%s/records?perPage=500", "https://pb.venbait.in", reqBody.Collection) fmt.Println("Fetching collection from URL:", url) req, _ := http.NewRequest("GET", url, nil) @@ -1808,10 +1865,10 @@ func main() { "password": reqBody.LivePassword, } data, _ := json.Marshal(livePayload) - liveReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/api/admins/auth-with-password", liveBaseUrl), bytes.NewBuffer(data)) + liveReq, _ := http.NewRequest("POST", fmt.Sprintf("%s/api/admins/auth-with-password", "https://pocket.fcsc.gov.ae"), bytes.NewBuffer(data)) liveReq.Header.Set("Content-Type", "application/json") liveResp, err := http.DefaultClient.Do(liveReq) - fmt.Println("Live url:", liveBaseUrl) + fmt.Println("Live url:", "https://pocket.fcsc.gov.ae") fmt.Println("Live req:", liveReq) if err != nil { return c.JSON(500, map[string]string{"error": "failed to connect to Live PB"}) @@ -1834,7 +1891,7 @@ func main() { data, _ := json.Marshal(rec) // Try PATCH first - patchURL := fmt.Sprintf("%s/api/collections/%s/records/%s", liveBaseUrl, reqBody.Collection, id) + patchURL := fmt.Sprintf("%s/api/collections/%s/records/%s", "https://pocket.fcsc.gov.ae", reqBody.Collection, id) req, _ := http.NewRequest("PATCH", patchURL, bytes.NewBuffer(data)) req.Header.Set("Authorization", liveLogin.Token) req.Header.Set("Content-Type", "application/json") @@ -1848,7 +1905,7 @@ func main() { if resp.StatusCode == 404 { // Create instead - postURL := fmt.Sprintf("%s/api/collections/%s/records", liveBaseUrl, reqBody.Collection) + postURL := fmt.Sprintf("%s/api/collections/%s/records", "https://pocket.fcsc.gov.ae", reqBody.Collection) req, _ := http.NewRequest("POST", postURL, bytes.NewBuffer(data)) req.Header.Set("Authorization", liveLogin.Token) req.Header.Set("Content-Type", "application/json") diff --git a/pb_data/logs.db b/pb_data/logs.db index 8599645..b78d7cf 100644 Binary files a/pb_data/logs.db and b/pb_data/logs.db differ