merge
This commit is contained in:
commit
4affc0a4fc
14
firebase-adminsdk-old.json
Executable file
14
firebase-adminsdk-old.json
Executable file
@ -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"
|
||||
}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
|
||||
"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"
|
||||
}
|
||||
|
||||
73
main.go
73
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")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user