diff --git a/.gitignore b/.gitignore index 1380f9a..a316021 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ +out # Visual Studio 2015 cache/options directory .vs/ diff --git a/Services/WebFormServices.cs b/Services/WebFormServices.cs index ccd7f20..b4a8739 100644 --- a/Services/WebFormServices.cs +++ b/Services/WebFormServices.cs @@ -32,6 +32,9 @@ using ServiceStack.Text; using System.Text; using ServiceStack.Redis; +using ExpressBase.Objects.ServiceStack_Artifacts.EbButtonPublicFormAttachServiceStackArtifacts; +using ExpressBase.Common.Helpers; +using ExpressBase.Objects.Dtos; namespace ExpressBase.ServiceStack.Services { @@ -3139,6 +3142,153 @@ public AttDeviceSaveRawPunchRecordsResp Post(AttDeviceSaveRawPunchRecordsReq req return resp; } + + public ResponseEbButtonPublicFormAttachServiceStackArtifact Get(RequestEbButtonPublicFormAttachServiceStackArtifact request) + { + + if (request == null) + { + return new ResponseEbButtonPublicFormAttachServiceStackArtifact + { + Success = false, + Error = new ErrorEbButtonPublicFormAttachServiceStackArtifact + { + ErrorCode = "InvalidRequest", + ErrorMessage = "Request payload is null." + } + }; + } + + + if (string.IsNullOrWhiteSpace(request.PublicFormRefId)) + { + return new ResponseEbButtonPublicFormAttachServiceStackArtifact + { + Success = false, + Error = new ErrorEbButtonPublicFormAttachServiceStackArtifact + { + ErrorCode = "MissingFormRefId", + ErrorMessage = "The 'PublicFormRefId' query parameter or path value is required." + } + }; + } + + if (string.IsNullOrWhiteSpace(request.SourceFormRefId)) + { + return new ResponseEbButtonPublicFormAttachServiceStackArtifact + { + Success = false, + Error = new ErrorEbButtonPublicFormAttachServiceStackArtifact + { + ErrorCode = "MissingFormRefId", + ErrorMessage = "The 'SourceFormRefId' query parameter or path value is required." + } + }; + } + + string publicFormId = null; + int expireInDays = 0; + int expireInHours = 0; + int expireInMinutes = 0; + bool found = false; + List fieldMaps = null; + EbButtonPublicFormAttachServiceDto dto; + List sourceFormPrimaryTableData = null; + + + + if (request.SourceFormDataId < 0) + { + return new ResponseEbButtonPublicFormAttachServiceStackArtifact + { + Success = false, + Error = new ErrorEbButtonPublicFormAttachServiceStackArtifact + { + ErrorCode = "MissingFormRefId", + ErrorMessage = "The 'SourceFormDataId' query parameter or path value is required." + } + }; + } + + + try + { + + EbWebForm form = this.GetWebFormObject(request.SourceFormRefId, request.UserAuthId, request.SolnId); + + + foreach (var table in form.FormSchema.Tables) + { + foreach (var column in table.Columns) + { + if (column.Control != null && column.Control is EbButtonPublicFormAttach control) + { + //throwing an exception as there is a mismatch in PublicFormRefId reveived from frontend + + if (request.PublicFormRefId != control.PublicFormId) + { + throw new ArgumentException($"PublicFormRefId ({request.PublicFormRefId}) does not match PublicFormId ({control.PublicFormId})."); + } + + publicFormId = control.PublicFormId; + expireInDays = control.ExpireInDays; + expireInHours = control.ExpireInHours; + expireInMinutes = control.ExpireInMinutes; + fieldMaps = control.FieldMaps; + + found = true; + break; + + } + } + + if (found) + { + break; + } + } + + form.TableRowId = request.SourceFormDataId; + form.RefreshFormData(EbConnectionFactory.DataDBRO, this); + + foreach (var sourceFormPrimaryTableDataum in form.FormData.MultipleTables[form.TableName]) + { + if (sourceFormPrimaryTableDataum.RowId == request.SourceFormDataId) + { + sourceFormPrimaryTableData = sourceFormPrimaryTableDataum.Columns; + break; + } + } + + + return new ResponseEbButtonPublicFormAttachServiceStackArtifact + { + Success = true, + EbButtonPublicFormAttachServiceDto = new EbButtonPublicFormAttachServiceDto( + publicFormId, + expireInDays, + expireInHours, + expireInMinutes, + fieldMaps, + sourceFormPrimaryTableData + ), + }; + } + catch (Exception ex) + { + + return new ResponseEbButtonPublicFormAttachServiceStackArtifact + { + Success = false, + Error = new ErrorEbButtonPublicFormAttachServiceStackArtifact + { + ErrorCode = "ServerError", + ErrorMessage = ex.Message + } + }; + } + } + } } diff --git a/Startup.cs b/Startup.cs index a261ecc..49c6da3 100644 --- a/Startup.cs +++ b/Startup.cs @@ -94,6 +94,7 @@ public override void Configure(Container container) MyJwtAuthProvider jwtprovider = new MyJwtAuthProvider { HashAlgorithm = "RS256", + //TODO: base64 encode these in env PrivateKeyXml = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_JWT_PRIVATE_KEY_XML), PublicKeyXml = Environment.GetEnvironmentVariable(EnvironmentConstants.EB_JWT_PUBLIC_KEY_XML), //#if (DEBUG)