Firebase_Implementation #135
@ -19,6 +19,7 @@ namespace Marco.Pms.Model.Dtos.Attendance
|
|||||||
public ATTENDANCE_MARK_TYPE Action { get; set; }
|
public ATTENDANCE_MARK_TYPE Action { get; set; }
|
||||||
|
|
||||||
public FileUploadModel? Image { get; set; }
|
public FileUploadModel? Image { get; set; }
|
||||||
|
public string DeviceToken { get; set; } = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ATTENDANCE_MARK_TYPE
|
public enum ATTENDANCE_MARK_TYPE
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
using FirebaseAdmin.Messaging;
|
||||||
using Marco.Pms.DataAccess.Data;
|
using Marco.Pms.DataAccess.Data;
|
||||||
using Marco.Pms.Model.AttendanceModule;
|
using Marco.Pms.Model.AttendanceModule;
|
||||||
using Marco.Pms.Model.Dtos.Attendance;
|
using Marco.Pms.Model.Dtos.Attendance;
|
||||||
@ -599,6 +600,7 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
using var transaction = await _context.Database.BeginTransactionAsync();
|
using var transaction = await _context.Database.BeginTransactionAsync();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
Attendance? attendance = await _context.Attendes.FirstOrDefaultAsync(a => a.Id == recordAttendanceDot.Id && a.TenantId == TenantId); ;
|
Attendance? attendance = await _context.Attendes.FirstOrDefaultAsync(a => a.Id == recordAttendanceDot.Id && a.TenantId == TenantId); ;
|
||||||
|
|
||||||
if (recordAttendanceDot.MarkTime == null)
|
if (recordAttendanceDot.MarkTime == null)
|
||||||
@ -806,6 +808,18 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
PreSignedUrl = string.Empty
|
PreSignedUrl = string.Empty
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
var message = new Message()
|
||||||
|
{
|
||||||
|
Token = recordAttendanceDot.DeviceToken,
|
||||||
|
Notification = new Notification
|
||||||
|
{
|
||||||
|
Title = "Hello from .NET",
|
||||||
|
Body = "This is a test message"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
string response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
|
||||||
|
_logger.LogInfo("Firebase push notification messageId: {MessageId}", response);
|
||||||
|
|
||||||
|
|
||||||
_logger.LogInfo("Attendance for employee {FirstName} {LastName} has been marked", employee.FirstName ?? string.Empty, employee.LastName ?? string.Empty);
|
_logger.LogInfo("Attendance for employee {FirstName} {LastName} has been marked", employee.FirstName ?? string.Empty, employee.LastName ?? string.Empty);
|
||||||
return Ok(ApiResponse<object>.SuccessResponse(vm, "Attendance marked successfully.", 200));
|
return Ok(ApiResponse<object>.SuccessResponse(vm, "Attendance marked successfully.", 200));
|
||||||
|
13
Marco.Pms.Services/FireBase/service-account.json
Normal file
13
Marco.Pms.Services/FireBase/service-account.json
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"type": "service_account",
|
||||||
|
"project_id": "marcopms-mobileapp",
|
||||||
|
"private_key_id": "5ee56ae12fbbfd95f46c613db3aa966fe26fe1b6",
|
||||||
|
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDJrORK61zoPVTw\nr8TkLbgV9qejyTD6OP67fMsxgJDSr8Fq6AJxKNfIMD+RhH44/etUeoHMDoYXQY5k\nu9sRaHnh1Hk62FJSm4SnhwwMdjVZT4xakuq4cfWfXBu3lQJHXfZEXJIjTwLr3Jb4\nryWVndEAI0/mT2drJc3riGLYCDEf4A79RXAzqGqg4A539JJ5+3zAtqepTbGpZ/cO\nJOmLP8k27Pm7lvuiyl4f16Xw0V00s1RCnFJIyBrrCqtCT5vTWdZ7a5ka10HgCFlW\nPUwjfB7b1rqSXmxsCOuRma2fQYc0cIhnFvXh71pC4kP0/V9K6cWxS97i1URU0hhi\nVOPoZ+j3AgMBAAECggEAOfUXvngZQRyvFmRM/w4sgxNZZfZhvuc2PYdFlbpO5F1i\nBmkamo6URJGpExayd4pxYNu8BXp/CpvqYgSilkQiEsZO+JxGPDs5SjPDQKmP91Sn\nDzh9f/gwEFYWGRIXj47vQQIhdUg1nLbOJDWhZXfvIk0DnzpejCpXHUMatN7Vz0TA\nAfj9mMcptXBNtLKl59sDkkscEj3Uf/s0d//jrhhEOsyid+slgIpRpQzgHQBavi0d\nhT/aVnBE9NiCgkZARVjcljIXTg24rYrARHYjsN066WdOF2uVnUNrxOgLQfzE7ZOe\nWzF0PDWyJe4FBjabIOHqFw4Nt3j2EakXUJ6Q/PVukQKBgQDvj2mv+0myeP5Wc5Cu\nW9BVrE41Q8nBq0D5CTIyklAP7SVOakmzjzbRV2rjL3Gnzo27tK3aUQjetTMYv5fk\nUUMJkzGvpgJW44qtULHP5gvkaPjV18CwvQv8KyyEOnF7uWkXquJ+9nfrzDaocx/X\nA1wx3Csvd/tTePSCY0uBCIMCFQKBgQDXg+tAiTUesGB3YpS77oc1XHdB9j+/anzx\n2e/PcGMzY2BZdNZ23avS0dnWfkZ1Eocxma8UP+okIvSyMpD4kSlJeya56HZU748E\nvJM7HlqCuYRvVbXVAiHrdC87eKhCzA9MNwBpy0fTbuudaDU2Z9WhoRgHqnte8vvw\nLCNTcKXd2wKBgQCT+cBM5in1xmtEt4ntSeV8pjyBBmh/6urtadLKDjrKO7BJqbnw\n4kv4L8lkoA/SmfJOuiKRsnCKMN9pMCAA9nk0VungF+lmBpPIzwmm4/EAnB7o6Kas\nBXp7v6d13ivvQu45omLaDiCxVKmGj+ZhCEBQxDEg1zo1q4dNa0xeXgWeqQKBgC0Z\n41qPHDm+6YEydTPbGBqXrjF0qiSR0XH/jMsZlvkDG/+8jsEzZKjq166moHIRnY9I\nvTX8pjBHzHOaV3JdVomVJyaSumjN9V0lZZ5inMhssIVoJ3RbTOPsXZIRjwzjjXQC\nsqhxLSfXN6GqVDB9jFyVzOSVzdmx+f1qDz5//YYvAoGAKPZazVtNAXf1/qgBEivE\ncSFaGhdcw35Pwk9CNwKtRT2DFOVQEvd18xY5Naqnm6thYv+UUEAQzGS/6mBUXsOi\n7nDsEN2P40o/eR6x10ZExwsqzIeOTd16fRiQyoMIEOQ7bkGO4KeZ8zAeqKelQxhU\njigmeDSw8y+HfTx74P7yAtI=\n-----END PRIVATE KEY-----\n",
|
||||||
|
"client_email": "firebase-adminsdk-fbsvc@marcopms-mobileapp.iam.gserviceaccount.com",
|
||||||
|
"client_id": "107885185225751718454",
|
||||||
|
"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%40marcopms-mobileapp.iam.gserviceaccount.com",
|
||||||
|
"universe_domain": "googleapis.com"
|
||||||
|
}
|
@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="AWSSDK.S3" Version="3.7.416.13" />
|
<PackageReference Include="AWSSDK.S3" Version="3.7.416.13" />
|
||||||
|
<PackageReference Include="FirebaseAdmin" Version="3.2.0" />
|
||||||
|
<PackageReference Include="Google.Apis.Auth" Version="1.70.0" />
|
||||||
<PackageReference Include="MailKit" Version="4.9.0" />
|
<PackageReference Include="MailKit" Version="4.9.0" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.20" />
|
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.20" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.12" />
|
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.12" />
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
|
using FirebaseAdmin;
|
||||||
|
using Google.Apis.Auth.OAuth2;
|
||||||
using Marco.Pms.DataAccess.Data;
|
using Marco.Pms.DataAccess.Data;
|
||||||
using Marco.Pms.Model.Authentication;
|
using Marco.Pms.Model.Authentication;
|
||||||
using Marco.Pms.Model.Entitlements;
|
using Marco.Pms.Model.Entitlements;
|
||||||
@ -170,6 +172,13 @@ builder.WebHost.ConfigureKestrel(options =>
|
|||||||
options.AddServerHeader = false; // Disable the "Server" header
|
options.AddServerHeader = false; // Disable the "Server" header
|
||||||
});
|
});
|
||||||
|
|
||||||
|
string path = Path.Combine(builder.Environment.ContentRootPath, "FireBase", "service-account.json");
|
||||||
|
|
||||||
|
FirebaseApp.Create(new AppOptions()
|
||||||
|
{
|
||||||
|
Credential = GoogleCredential.FromFile(path),
|
||||||
|
});
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
|
||||||
app.UseMiddleware<ExceptionHandlingMiddleware>();
|
app.UseMiddleware<ExceptionHandlingMiddleware>();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user