Jump to content

Search the Community

Showing results for 'Self Signed certificate'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • uniGUI Public
    • Announcements
    • General
    • Feature Requests
    • Installation
    • Deployment
    • Other Platforms
  • Licensing
    • Licensing
    • Ordering uniGUI
  • Bug Reports
    • Active Reports
    • Closed Reports
    • Old Bug Reports
  • uniGUI Development
    • General Development
    • uniGUI Releases & Roadmaps
    • Utilities
  • Mobile Platform
    • uniGUI Mobile
    • Mobile Browsers
  • Users Area
    • Sample Projects
    • Components and Code Samples
    • Third Party Components
  • Non-English
    • Non-English
  • Miscellaneous
    • Hosting
    • Server Security
    • Jobs

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

  1. OK, maybe we will start over. So for example I have form and 4 uniDBEdits. 3 of them must be validated (no empty) so I make this in form create: UniDBEdit1.JSInterface.JSConfig('allowBlank', [False]); UniDBEdit2.JSInterface.JSConfig('allowBlank', [False]); UniDBEdit3.JSInterface.JSConfig('allowBlank', [False]); UniDBEdit4.JSInterface.JSConfig('allowBlank', [True]); UniButton4.JSInterface.JSAddListener('click', 'function(){return '+ Self.WebForm.JSForm.JSName +'.isValid()}'); Now I wants to expand validation for new feature - showmessage and setfocus. So I want to write procedure that will check in loop if all UniDBEdits in that form has allowblank set to false and UniDBEdit text is empty if that 2 condition is fulfilled then procudure will show message and set focus current UniDBEdit in that loop. So my question is how to check if component have set allowblank true or false?
  2. Добрый день. Делаю простенький чат на основе компонента TUniDBGrid. Нашел Тему Не подскажете куда в Uni добавлять верстку SCC @use postcss-nested; :root { --send-bg: #0B93F6; --send-color: white; --receive-bg: #E5E5EA; --receive-text: black; --page-background: white; } body { font-family: "Helvetica Neue", Helvetica, sans-serif; font-size: 20px; font-weight: normal; max-width: 450px; margin: 50px auto; display: flex; flex-direction: column; background-color: var(--page-background); } p { max-width: 255px; word-wrap: break-word; margin-bottom: 12px; line-height: 24px; position: relative; padding: 10px 20px; border-radius: 25px; &:before, &:after { content: ""; position: absolute; bottom: 0; height: 25px; } } .send { color: var(--send-color); background: var(--send-bg); align-self: flex-end; &:before { right: -7px; width: 20px; background-color: var(--send-bg); border-bottom-left-radius: 16px 14px; } &:after { right: -26px; width: 26px; background-color: var(--page-background); border-bottom-left-radius: 10px; } } .receive { background: var(--receive-bg); color: black; align-self: flex-start; &:before { left: -7px; width: 20px; background-color: var(--receive-bg); border-bottom-right-radius: 16px 14px; } &:after { left: -26px; width: 26px; background-color: var(--page-background); border-bottom-right-radius: 10px; } }
  3. I tested your code and works fine with .exe + SSL (Self signed Certificate). I did'nt try it as IIS +SSL. ________ How are you adding your SSL in IIS ?
  4. I compiled all above in program wich create a Self Signed Certificate in 3 secondes. Best Regards... See the updated program here : http://forums.unigui.com/index.php?/topic/18951-help-with-ssl-intranet/&do=findComment&comment=141667 Prg.7z
  5. I ran into a problem that in version 1.95.0.1576 the WS does not work on the Login form. Of course, this is possible and correct, because the user has not yet logged in, but there are ReceiveSocketsEvents in the form properties, but there is no Delphi event BroadcastMessage(this handler is an illusion, because in fact WS listens only to the frontend and it sends an ajaxRequest to the backend). I have solved this problem (through a crutch😞 1. property form ReceiveSocketsEvents - in True 2. I add in ClientEvents - for event form.socketmesssage it code 3. And added a handler on onAjaxEvent... (with my procedure, here will be your handler) 4. Next.. i add in Delphi Event - OnCreate (LoginForm) call: UniServerModule.WebSocketStack.CreateWebSocket(unisession, self.WebForm); this opens WebSockets in the browser - Ok But if after that you try to log in (and on the main form you will listen to the WS channel) then you will get an error in the browser console: "WebSocket is closed before the connection is established" - https://stackoverflow.com/questions/12487828/what-does-websocket-is-closed-before-the-connection-is-established-mean for Example: Okay not a nice mistake... - We understand that we need to close the connection on the login form (before initializing the main form) because the connection is global... (We go to the JS part of the framework and look at everything in WS) 5. Writing in Delphi class Helper: TUniWebSocketStackHelp = class helper for TUniWebSocketStack public procedure TerminateWS(const aForm: TUniBaseJSForm); procedure CloseWS(const aForm: TUniBaseJSForm); end; //... procedure TUniWebSocketStackHelp.CloseWS(const aForm: TUniBaseJSForm); begin with aForm.JSInterface do begin JSCallGlobal('uniWebSocketObj.closeSocket', []); end; end; procedure TUniWebSocketStackHelp.TerminateWS(const aForm: TUniBaseJSForm); begin with aForm.JSInterface do begin JSCallGlobal('uniWebSocketObj.terminateSocket', []); end; end; 6. Before closing the login form (ModalResult.mrok), we perform: "UniServerModule.WebSocketStack.TerminateWS(self.WebForm);" - I hope this is useful to someone!!
  6. I am trying to prevent text selection highlighting of a TUniLabel which is being dynamically created in code. In the UniServerModule.CustomCSS I have the following: .noselect { -webkit-touch-callout: none; /* iOS Safari */ -webkit-user-select: none; /* Safari */ -khtml-user-select: none; /* Konqueror HTML */ -moz-user-select: none; /* Firefox */ -ms-user-select: none; /* Internet Explorer/Edge */ user-select: none; /* Non-prefixed version, currently supported by Chrome and Opera */ } And In code I create the label and try to set the UniEvents beforeInit: FLbl := TUniLabel.Create(Self); FLbl.Parent := Self; FLbl.Font.Size := 20; FLbl.Left := 10; FLbl.Text := 'Hello There'; FLbl.ClientEvents.UniEvents.Text := 'beforeInit=function beforeInit(sender, config)'#13#10'{'#13#10' config.cls=' + '"noselect";'#13#10'}' However the above does not work and I can still highlight the label text. I know the CSS does work if I put a TUniLabel on a form and in the object inspector set the beforeInit. What do I need to do to get the above code to work when the label is dynamically created?
  7. Attached. unit uniDBLookupComboBoxObject; interface uses System.SysUtils, System.Classes, Vcl.Controls, Vcl.Forms, Data.DB, uniGUIBaseClasses, uniGUIClasses, uniMultiItem, uniComboBox, uniDBComboBox, uniDBLookupComboBox, Aurelius.Bind.Dataset, System.Variants, devsul.model.search, Aurelius.Criteria.Linq, Aurelius.Criteria.Base; type TUniDBLookupComboBoxObject = class(TUniDBLookupComboBox) private { Private declarations } FRequired: Boolean; FListSource, FDataSet: TAureliusDataset; FCriteriaListSource: TCriteria; FListValues: TStringList; procedure ExecuteSearch; protected { Protected declarations } FOldUniTriggerEvent: TUniTriggerEvent; FSearch: TSearch; procedure DoSetRemoteValue(AIndex: Integer; Value: string); override; procedure MyTriggerEvent(Sender: TUniCustomComboBox; AButtonId: Integer); procedure LoadCompleted; override; procedure _RemoteQuery(const QueryString: string; Result: TStrings); procedure _GetKeyValue(const Value: string; var KeyValue: Variant); public { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure SetSearch(Search: TSearch); published { Published declarations } property Required: Boolean read FRequired write FRequired default False; end; procedure Register; implementation uses view.search.default, uniGUIApplication, Winapi.Windows; procedure Register; begin RegisterComponents('UniGUI Extension', [TUniDBLookupComboBoxObject]); end; { TUniDBLookupComboBoxObject } constructor TUniDBLookupComboBoxObject.Create(AOwner: TComponent); begin inherited Create(AOwner); end; destructor TUniDBLookupComboBoxObject.Destroy; begin if Assigned(Self.FSearch) then Self.FSearch.Free; if Assigned(Self.FListValues) then Self.FListValues.Free; if Assigned(Self.FCriteriaListSource) then Self.FCriteriaListSource.Free; inherited Destroy; end; procedure TUniDBLookupComboBoxObject.DoSetRemoteValue(AIndex: Integer; Value: string); begin inherited; if (VarIsNull(Self.KeyValue)) and (Assigned(Self.FDataSet)) then Self.FDataSet.EntityFieldByName(String(Self.DataField)).AsObject := nil; end; procedure TUniDBLookupComboBoxObject.ExecuteSearch; begin with TuniFormSearch.Create(UniApplication) do begin try ConfigureSearch(Self.FSearch); ShowModal; if ModalResult = mrOk then begin if Assigned(Selected) then begin Self.FListSource.Close; Self.FListSource.SetSourceObject(Selected); Self.FListSource.Open; if Assigned(Self.FDataSet) then Self.FDataSet.EntityFieldByName(String(Self.DataField)).AsObject := Selected; if Assigned(Self.OnSelect) then Self.OnSelect(Self); end; end; finally Free; end; Self.SetFocus; end; end; procedure TUniDBLookupComboBoxObject.LoadCompleted; begin if Self.Required then Self.ClientEvents.UniEvents.Values['beforeInit'] := 'function beforeInit(sender, config){Ext.apply(sender,{allowBlank:false,msgTarget : ''side''});}'; if Self.Triggers.Count = 0 then begin with Self.Triggers.Add do begin IconCls := 'x-form-search-trigger'; HandleClicks := True; Visible := True; end; end else begin Self.Triggers[0].IconCls := 'x-form-search-trigger'; Self.Triggers[0].HandleClicks := True; Self.Triggers[0].Visible := True; end; Self.FOldUniTriggerEvent := Self.OnTriggerEvent; OnTriggerEvent := Self.MyTriggerEvent; if Self.RemoteQuery then begin FListValues := TStringList.Create; Self.OnRemoteQuery := Self._RemoteQuery; Self.OnGetKeyValue := Self._GetKeyValue; end; inherited; end; procedure TUniDBLookupComboBoxObject.MyTriggerEvent(Sender: TUniCustomComboBox; AButtonId: Integer); begin if AButtonId = 0 then Self.ExecuteSearch; if Assigned(Self.FOldUniTriggerEvent) then Self.FOldUniTriggerEvent(Sender, AButtonId); end; procedure TUniDBLookupComboBoxObject._GetKeyValue(const Value: string; var KeyValue: Variant); var lObj: TObject; lIndex : Integer; begin KeyValue := Null; lObj := nil; if not Value.IsEmpty and not Self.FListSource.IsEmpty then begin if FListValues.Count = 0 then lObj := Self.FListSource.InternalList.Item(0) else begin lIndex := FListValues.IndexOf(Value); if lIndex <> -1 then lObj := Self.FListSource.InternalList.Item(lIndex); end; if Assigned(lObj) then KeyValue := Integer(lObj); end; end; procedure TUniDBLookupComboBoxObject._RemoteQuery(const QueryString: string; Result: TStrings); var lListFields: TStringList; i: Integer; lCriterion: TLinqExpression; lCustomCriteria: TCriteria; lStrListValue: String; begin if (Self.FCriteriaListSource <> nil) and (Trim(Self.Text) <> Trim(QueryString)) then begin lListFields := nil; try lListFields := TStringList.Create; lListFields.Text := Self.ListField.Replace(';', sLineBreak); lCustomCriteria := Self.FCriteriaListSource.Clone; lCriterion := Linq[lListFields[0]].Upper.Like(UpperCase(VarToStr(QueryString)) + '%'); lListFields.Delete(0); for i := 0 to lListFields.Count - 1 do if Self.FListSource.FieldByName(lListFields).Tag = 0 then lCriterion := lCriterion or (Linq[lListFields].Upper.Like('%' + UpperCase(VarToStr(QueryString)) + '%')); lCustomCriteria.Where(lCriterion); Self.FListSource.Close; Self.FListSource.SetSourceCriteria(lCustomCriteria, 25); Self.FListSource.Open; lListFields.Text := Self.ListField.Replace(';', sLineBreak); Self.FListValues.Clear; while not Self.FListSource.Eof do begin lStrListValue := EmptyStr; for i := 0 to lListFields.Count - 1 do begin if i = 0 then begin if Self.FListSource.FieldByName(lListFields).AsString <> '' then lStrListValue := Self.FListSource.FieldByName(lListFields).AsString end else begin if Self.FListSource.FieldByName(lListFields).AsString <> '' then lStrListValue := lStrListValue + ' - ' + Self.FListSource.FieldByName(lListFields).AsString; end; end; if not lStrListValue.IsEmpty then begin Result.Add(lStrListValue); Self.FListValues.Add(lStrListValue); end; Self.FListSource.Next; end; finally lListFields.Free; lCriterion := nil; end; end; end; procedure TUniDBLookupComboBoxObject.SetSearch(Search: TSearch); var lObject: TObject; begin Self.FSearch := Search; Self.FListSource := TAureliusDataset(Self.ListSource.Dataset); Self.FDataSet := TAureliusDataset(Self.DataSource.Dataset); Self.FCriteriaListSource := Search.Criteria.Clone; lObject := Self.FDataSet.EntityFieldByName(String(Self.DataField)).AsObject; if Assigned(lObject) then begin Self.FListSource.Close; Self.FListSource.SetSourceObject(lObject); Self.FListSource.Open; Self.KeyValue := Integer(lObject); Self.UpdateText; end; end; end.
  8. Hi, This problem is displayed when entering the site. After canceling, you can enter the site. What settings did I make wrong? Regards.
  9. Hello, Can you please clarify? First of all, were you able to generate a self-signed certificate with an IP address?
  10. Can you please send your certificate files to us -> info@ fmsoft.net.
  11. Is your private key sent to you by your SSL provider? I am asking this because if you create your CSR (Certificate Signing Request) file yourself, the key file will be on your PC and it will be protected by a password given during creating the CSR.
  12. Hi Israel, 1. Check begin and end block of your two files : certificate.crt ca_bundle.crt They must contain only one block. 2. The Key.pem must be proceed and obtain from your Customer Server, not yours.
  13. On 30th September 2021, the root certificate that Let's Encrypt are currently using, the IdentTrust DST Root CA X3 certificate, will expire. Just in case you missed it - here is a good blog post about the situation - https://scotthelme.co.uk/lets-encrypt-old-root-expiration/
  14. Sorry for the late response - but I was totally overloaded the last weeks.... Here the promised source code - its free for everybody, but please do not ask questions about it. In case you want enhance the code please do so but also post the enhancements here for everybody. 🙂 unit UniOpenDialog; { uniGUI Web Application Framework for Delphi Developed by: Kattes Free Usage for all registered UniGui Users :) } interface uses System.Classes, SysUtils, uniGUIBaseClasses, uniGUITypes, uniGUIClasses, uniFileUpload, System.IOUtils; type TUniCustomOpenDialog = class(TUniComponent) private FButton: TUniFileUploadButton; FOnFilesReady: TNotifyEvent; FAjaxEvent: TUniAjaxEvent; FOnCompleted: TUploadNotifyEvent; FOnMultiCompleted: TUploadMultiNotifyEvent; FFiles : TStringList; FFilter : string; FTargetFolder : string; FRebuild : boolean; function GetEraseCacheAfterCompleted: Boolean; procedure SetEraseCacheAfterCompleted(const Value: Boolean); function GetMessages: TUniCustomUploadMessages; procedure SetMessages(const Value: TUniCustomUploadMessages); function GetMaxAllowedSize: Cardinal; procedure SetMaxAllowedSize(const Value: Cardinal); function GetMaxFiles: Cardinal; procedure SetMaxFiles(const Value: Cardinal); function GetMultipleFiles: Boolean; procedure SetMultipleFiles(const Value: Boolean); function GetFilter: string; procedure SetFilter(const Value: string); function GetAjaxEvent: TUniAjaxEvent; procedure SetAjaxEvent(const Value: TUniAjaxEvent); procedure SetOverwrite(const Value: Boolean); function GetOverwrite: Boolean; function GetTimeoutMS: Integer; procedure SetTimeoutMS(const Value: Integer); function GetTimeoutSecs: Integer; procedure SetTimeoutSecs(const Value: Integer); procedure SetOnMultiCompleted(const Value: TUploadMultiNotifyEvent); procedure SetOnCompleted(const Value: TUploadNotifyEvent); procedure ButtonSingleCompleted(Sender: TObject; AStream: TFileStream); procedure ButtonMultiCompleted(Sender: TObject; Files: TUniFileInfoArray); public constructor Create(AOwner: TComponent); destructor Destroy; override; procedure Execute; property EraseCacheAfterCompleted: Boolean read GetEraseCacheAfterCompleted write SetEraseCacheAfterCompleted; property Files: TStringList read FFiles write FFiles; property Filter: string read GetFilter write SetFilter; property TargetFolder: string read FTargetFolder write FTargetFolder; property MaxAllowedSize: Cardinal read GetMaxAllowedSize write SetMaxAllowedSize; property MaxFiles: Cardinal read GetMaxFiles write SetMaxFiles; property Overwrite: Boolean read GetOverwrite write SetOverwrite default True; property OnFilesReady: TNotifyEvent read FOnFilesReady write FOnFilesReady; property OnAjaxEvent: TUniAjaxEvent read FAjaxEvent write FAjaxEvent; property OnCompleted: TUploadNotifyEvent read FOnCompleted write SetOnCompleted; property OnMultiCompleted: TUploadMultiNotifyEvent read FOnMultiCompleted write SetOnMultiCompleted; property MultipleFiles: Boolean read GetMultipleFiles write SetMultipleFiles; property Messages:TUniCustomUploadMessages read GetMessages write SetMessages; property TimeoutSecs: Integer read GetTimeoutSecs write SetTimeoutSecs; property TimeoutMS: Integer read GetTimeoutMS write SetTimeoutMS; end; TUniOpenDialog = class(TUniCustomOpenDialog) published property Filter; property Files; property TimeoutSecs; property TimeoutMS; property MaxAllowedSize; property Messages; property MultipleFiles; property MaxFiles; property TargetFolder; property Overwrite; property EraseCacheAfterCompleted; property OnCompleted; property OnMultiCompleted; property OnAjaxEvent; property OnFilesReady; end; procedure Register; implementation procedure Register; begin RegisterComponents('uniGUI Additional', [TUniOpenDialog]); end; constructor TUniCustomOpenDialog.Create(AOwner: TComponent); begin inherited Create(AOwner); // Name := AOwner.Name + 'OpenDialog'; FButton := TUniFileUploadButton.Create(AOwner); FRebuild := false; with FButton do begin Name := AOwner.Name + 'OpenDialog_UL'; SetParentComponent(AOwner); TargetFolder := ''; Filter := '.pat'; Visible := False; Messages.Uploading := 'Uploading...'; Messages.PleaseWait := 'Please Wait'; Messages.UploadError := 'Upload Error'; Messages.UploadTimeout := 'Timeout occurred...'; Messages.MaxSizeError := 'File is bigger than maximum allowed size'; Messages.MaxFilesError := 'You can upload maximum %d files.'; onCompleted := ButtonSingleCompleted; onMultiCompleted := ButtonMultiCompleted; end; FFiles := TStringList.Create; end; destructor TUniCustomOpenDialog.Destroy; begin inherited; FFiles.Free; end; procedure TUniCustomOpenDialog.Execute; var FDummy: TUniFileUploadButton; begin if FRebuild then begin FDummy := TUniFileUploadButton.Create(FButton.Owner); // Copy the properties of the original component to the new component FDummy.Parent := FButton.Parent; FDummy.EraseCacheAfterCompleted := FButton.EraseCacheAfterCompleted; FDummy.MultipleFiles := FButton.MultipleFiles; FDummy.MaxAllowedSize := FButton.MaxAllowedSize; FDummy.MaxFiles := FButton.MaxFiles; FDummy.Filter := FButton.Filter; FDummy.Messages.MaxSizeError := FButton.Messages.MaxSizeError; FDummy.Messages.MaxFilesError := FButton.Messages.MaxFilesError; FDummy.Messages.PleaseWait := FButton.Messages.PleaseWait; FDummy.Messages.UploadError := FButton.Messages.UploadError; FDummy.Messages.Uploading := FButton.Messages.Uploading; FDummy.Messages.UploadTimeout := FButton.Messages.UploadTimeout; FDummy.TargetFolder := FButton.TargetFolder; FDummy.ButtonVisible := FButton.ButtonVisible; FDummy.OnCompleted := FButton.OnCompleted; FDummy.OnMultiCompleted := FButton.OnMultiCompleted; FDummy.OnAjaxEvent := FButton.OnAjaxEvent; FDummy.Overwrite := FButton.Overwrite; FDummy.Visible := FButton.Visible; // Switch instance FButton.Free; FButton := FDummy; FRebuild := false; end; FButton.JSInterface.JSCall('fileInputEl.dom.click', []); end; function TUniCustomOpenDialog.GetAjaxEvent: TUniAjaxEvent; begin result := FButton.OnAjaxEvent; end; function TUniCustomOpenDialog.GetEraseCacheAfterCompleted: Boolean; begin result := FButton.EraseCacheAfterCompleted; end; function TUniCustomOpenDialog.GetFilter: string; begin result := FButton.Filter; end; function TUniCustomOpenDialog.GetMaxAllowedSize: Cardinal; begin result := FButton.MaxAllowedSize; end; function TUniCustomOpenDialog.GetMaxFiles: Cardinal; begin result := FButton.MaxFiles; end; function TUniCustomOpenDialog.GetMessages: TUniCustomUploadMessages; begin result := FButton.Messages; end; function TUniCustomOpenDialog.GetMultipleFiles: Boolean; begin result := FButton.MultipleFiles; end; function TUniCustomOpenDialog.GetOverwrite: Boolean; begin result := FButton.Overwrite; end; function TUniCustomOpenDialog.GetTimeoutMS: Integer; begin result := FButton.TimeoutMS; end; function TUniCustomOpenDialog.GetTimeoutSecs: Integer; begin result := FButton.TimeoutSecs; end; procedure TUniCustomOpenDialog.SetAjaxEvent(const Value: TUniAjaxEvent); begin FButton.OnAjaxEvent := Value; FRebuild := true; end; procedure TUniCustomOpenDialog.SetEraseCacheAfterCompleted(const Value: Boolean); begin FButton.EraseCacheAfterCompleted := Value; FRebuild := true; end; procedure TUniCustomOpenDialog.SetFilter(const Value: string); begin FButton.Filter := Value; FRebuild := true; end; procedure TUniCustomOpenDialog.SetMaxAllowedSize(const Value: Cardinal); begin FButton.MaxAllowedSize := Value; FRebuild := true; end; procedure TUniCustomOpenDialog.SetMaxFiles(const Value: Cardinal); begin FButton.MaxFiles := Value; FRebuild := true; end; procedure TUniCustomOpenDialog.SetMessages(const Value: TUniCustomUploadMessages); begin FButton.Messages := Value; FRebuild := true; end; procedure TUniCustomOpenDialog.SetMultipleFiles(const Value: Boolean); begin FButton.MultipleFiles := Value; FRebuild := true; end; procedure TUniCustomOpenDialog.SetOnCompleted(const Value: TUploadNotifyEvent); begin FOnCompleted := Value; end; procedure TUniCustomOpenDialog.SetOnMultiCompleted( const Value: TUploadMultiNotifyEvent); begin FOnMultiCompleted := Value; end; procedure TUniCustomOpenDialog.SetOverwrite(const Value: Boolean); begin FButton.Overwrite := Value; FRebuild := true; end; procedure TUniCustomOpenDialog.SetTimeoutMS(const Value: Integer); begin FButton.TimeoutMS := Value; FRebuild := true; end; procedure TUniCustomOpenDialog.SetTimeoutSecs(const Value: Integer); begin FButton.TimeoutSecs := Value; FRebuild := true; end; procedure TUniCustomOpenDialog.ButtonSingleCompleted(Sender: TObject; AStream: TFileStream); var FileStream: TFileStream; s : string; begin if not FButton.MultipleFiles then begin if TDirectory.Exists(FTargetFolder) then begin s := IncludeTrailingPathDelimiter(FTargetFolder) + FButton.FileName; if FileExists(s) and not fButton.Overwrite then raise Exception.Create('UniOpenDialog: File "'+s+'" already exists. An overwrite is not allowed'); FFiles.Clear; FileStream := TFileStream.Create(s, fmCreate); try FileStream.CopyFrom(AStream, AStream.Size); if FButton.EraseCacheAfterCompleted then DeleteFile(AStream.FileName); finally FileStream.Free; end; end else s := AStream.FileName; FFiles.Add(s); if Assigned(FOnCompleted) then FOnCompleted(Self, AStream); if FileExists(s) and Assigned(FOnFilesReady) then FOnFilesReady(Self); end; end; procedure TUniCustomOpenDialog.ButtonMultiCompleted(Sender: TObject; Files: TUniFileInfoArray); var I: Integer; s : string; FileStream: TFileStream; begin if FButton.MultipleFiles then begin FFiles.Clear; for I := Low(Files) to High(Files) do begin if Files[I].Success and Assigned(Files[I].Stream) then begin if TDirectory.Exists(FTargetFolder) then begin s := IncludeTrailingPathDelimiter(FTargetFolder) + Files[I].OriginalFileName; if FileExists(s) and not fButton.Overwrite then raise Exception.Create('UniOpenDialog: File "'+s+'" already exists. An overwrite is not allowed'); FileStream := TFileStream.Create(s, fmCreate); try FileStream.CopyFrom(Files[I].Stream, Files[I].Stream.Size); if FButton.EraseCacheAfterCompleted then DeleteFile(Files[I].Stream.FileName); finally FileStream.Free; end; end else s := Files[I].CacheFile; FFiles.Add(s); end; end; if Assigned(FOnMultiCompleted) then FOnMultiCompleted(Self, Files); // inform the owner that files are ready to process if (FFiles.Count >0) and Assigned(FOnFilesReady) then FOnFilesReady(Self); end; end; end.
  15. I'm building my application as ISAPI module to integrate with Apache server. Apache is configured for Mutual Authentication, so I need to read client certificate properties. In PHP this properties are retrieved through the $_SERVER[...] variables. How can read server variables with UniGui ?
  16. irigsoft

    Using TLS 1.3

    maybe this will help to You: I use trusted certificate. I had set up in the URL='https://X.X.X.X:8070/...'and the problem was it. After I set it up in the URL='https://myaddres:8070/...' the problem solved in MsgSrv. http://forums.unigui.com/index.php?/search/&q="Self Signed certificate"&quick=1 or this:
  17. Hello. This is not exactly a problem with UNIGUI, but I can't use SSL in my StandAlone application. Here are my settings and error when starting the application. Error: I have not install nothing (certificates or something else). What I can do ?
  18. hello I have a TrustCor Standard DV certificate from noip i installed .all works fine with https on pc but on android i get error certificate not valid?
  19. hello I downloaded my certificate (TrustCor Standard DV noip) i installed my ssl on my server which needs three cert.pem root.pem and key.pem files cert is my certificate. key.pem my private for root key I downloaded chain pem converted to rooy.pem. the chain.pem file contains 3 certificates: 1 intermediate1, intermediate2 and root all works fine on desktop pc but for android I have a problem with invalid certificate please help me the result of the test my certificate gives: Certificate #1: RSA 2048 bits (SHA256withRSA) Server Key and Certificate #1 Subject mondomaine.ly Fingerprint SHA256: 53c2a119bfe36c74e2830b4df91015f0337eeafdb75b3b29652c35ad646f7d7c Pin SHA256: LBEhUc/LINIlfK7G/C29ZpAzgV1fFegJ+HnN4g47o0w= Common names mondomaine.ly Alternative names mondomaine.ly Serial Number 00dfcea85d0ab3312a7f502442 Valid from Sun, 13 Jun 2021 08:49:16 UTC Valid until Mon, 13 Jun 2022 08:49:15 UTC (expires in 11 months and 27 days) Key RSA 2048 bits (e 65537) Weak key (Debian) No Issuer TrustCor DV SSL CA - G2 - RSA AIA: http://certs.trustcor.ca/sub/dv-ssl-rsa.der Signature algorithm SHA256withRSA Extended Validation No Certificate Transparency Yes (certificate) OCSP Must Staple No Revocation information CRL, OCSP CRL: http://crl.trustcor.ca/sub/dv-ssl-rsa-s-66.crl OCSP: http://ocsp.trustcor.ca Revocation status Validation error OCSP ERROR: Exception: connect timed out [http://ocsp.trustcor.ca] CRL ERROR: IOException occurred DNS CAA No (more info) Trusted Yes Mozilla Apple Android Java Windows Additional Certificates (if supplied) Certificates provided 4 (5277 bytes) Chain issues Contains anchor #2 Subject TrustCor DV SSL CA - G2 - RSA Fingerprint SHA256: beb51c8f452426b2b9e672f7dd1eea4b33d6c38f4ca2a96956ce24bd05b0c38d Pin SHA256: eS9Oc92+qoeyy7FaGbRe6FO/VTah35Lxm0PDdpsLdHc= Valid until Sun, 30 Dec 2029 22:59:59 UTC (expires in 8 years and 6 months) Key RSA 2048 bits (e 65537) Issuer TrustCor DV SSL CA - G2 Signature algorithm SHA256withRSA #3 Subject TrustCor DV SSL CA - G2 Fingerprint SHA256: f0b6b7598df2790471552632eba9cde6d349065fc6d665957f9eeef5a7bb24f2 Pin SHA256: joJVEgkWNcXOGzwqvqRUGUI1s5Dz+sm7yE2V6LjAa9A= Valid until Sun, 30 Dec 2029 23:59:59 UTC (expires in 8 years and 6 months) Key RSA 2048 bits (e 65537) Issuer TrustCor RootCert CA-1 Signature algorithm SHA256withRSA #4 Subject TrustCor RootCert CA-1 In trust store Fingerprint SHA256: d40e9c86cd8fe468c1776959f49ea774fa548684b6c406f3909261f4dce2575c Pin SHA256: 6of0Yt7v/713daoqS34Py5HCLu5t9p7ZAQDMxzsxFHY= Valid until Mon, 31 Dec 2029 17:23:16 UTC (expires in 8 years and 6 months) Key RSA 2048 bits (e 65537) Issuer TrustCor RootCert CA-1 Self-signed Signature algorithm SHA256withRSA Show Certification PathsCertification Paths Click here to expand Configuration Protocols TLS 1.3 No TLS 1.2 Yes TLS 1.1 No TLS 1.0 No SSL 3 No SSL 2 No Cipher Suites # TLS 1.2 (server has no preference) TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa) WEAK 112 TLS_RSA_WITH_AES_128_CBC_SHA (0x2f) WEAK 128 TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (0x41) WEAK 128 TLS_RSA_WITH_SEED_CBC_SHA (0x96) WEAK 128 TLS_RSA_WITH_AES_128_CBC_SHA256 (0x3c) WEAK 128 TLS_RSA_WITH_AES_128_GCM_SHA256 (0x9c) WEAK 128 TLS_RSA_WITH_RC4_128_MD5 (0x4) INSECURE 128 TLS_RSA_WITH_RC4_128_SHA (0x5) INSECURE 128 TLS_RSA_WITH_IDEA_CBC_SHA (0x7) WEAK 128 TLS_RSA_WITH_AES_256_CBC_SHA (0x35) WEAK 256 TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (0x84) WEAK 256 TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3d) WEAK 256 TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d) WEAK 256 Handshake Simulation Android 4.4.2 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Android 5.0.0 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_CBC_SHA No FS Android 6.0 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_GCM_SHA256 No FS Android 7.0 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_GCM_SHA256 No FS Android 8.0 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_GCM_SHA256 No FS Android 8.1 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_GCM_SHA256 No FS Android 9.0 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_GCM_SHA256 No FS BingPreview Jan 2015 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Chrome 49 / XP SP3 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_GCM_SHA256 No FS Chrome 69 / Win 7 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_GCM_SHA256 No FS Chrome 70 / Win 10 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_GCM_SHA256 No FS Chrome 80 / Win 10 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_GCM_SHA256 No FS Firefox 31.3.0 ESR / Win 7 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_CBC_SHA No FS Firefox 47 / Win 7 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_CBC_SHA No FS Firefox 49 / XP SP3 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_CBC_SHA No FS Firefox 62 / Win 7 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_CBC_SHA No FS Firefox 73 / Win 10 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_CBC_SHA No FS Googlebot Feb 2018 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_GCM_SHA256 No FS IE 11 / Win 7 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS IE 11 / Win 8.1 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS IE 11 / Win Phone 8.1 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_128_CBC_SHA256 No FS IE 11 / Win Phone 8.1 Update R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS IE 11 / Win 10 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Edge 15 / Win 10 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Edge 16 / Win 10 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Edge 18 / Win 10 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Edge 13 / Win Phone 10 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Java 8u161 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_CBC_SHA256 No FS Java 11.0.3 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Java 12.0.1 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS OpenSSL 1.0.1l R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS OpenSSL 1.0.2s R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS OpenSSL 1.1.0k R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS OpenSSL 1.1.1c R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Safari 6 / iOS 6.0.1 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_CBC_SHA256 No FS Safari 7 / iOS 7.1 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_CBC_SHA256 No FS Safari 7 / OS X 10.9 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_CBC_SHA256 No FS Safari 8 / iOS 8.4 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_CBC_SHA256 No FS Safari 8 / OS X 10.10 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_CBC_SHA256 No FS Safari 9 / iOS 9 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Safari 9 / OS X 10.11 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Safari 10 / iOS 10 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Safari 10 / OS X 10.12 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Safari 12.1.2 / MacOS 10.14.6 Beta R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Safari 12.1.1 / iOS 12.3.1 R RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS Apple ATS 9 / iOS 9 R Server sent fatal alert: handshake_failure Yahoo Slurp Jan 2015 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS YandexBot Jan 2015 RSA 2048 (SHA256) TLS 1.2 TLS_RSA_WITH_AES_256_GCM_SHA384 No FS # Not simulated clients (Protocol mismatch) Click here to expand (1) Clients that do not support Forward Secrecy (FS) are excluded when determining support for it. (2) No support for virtual SSL hosting (SNI). Connects to the default site if the server uses SNI. (3) Only first connection attempt simulated. Browsers sometimes retry with a lower protocol version. (R) Denotes a reference browser or client, with which we expect better effective security. (All) We use defaults, but some platforms do not use their best protocols and features (e.g., Java 6 & 7, older IE). (All) Certificate trust is not checked in handshake simulation, we only perform TLS handshake. Protocol Details DROWN No, server keys and hostname not seen elsewhere with SSLv2 (1) For a better understanding of this test, please read this longer explanation (2) Key usage data kindly provided by the Censys network search engine; original DROWN website here (3) Censys data is only indicative of possible key and certificate reuse; possibly out-of-date and not complete Secure Renegotiation Supported Secure Client-Initiated Renegotiation Yes Insecure Client-Initiated Renegotiation No BEAST attack Mitigated server-side (more info) POODLE (SSLv3) No, SSL 3 not supported (more info) POODLE (TLS) No (more info) Zombie POODLE No (more info) TLS 1.2 : 0x000a GOLDENDOODLE No (more info) TLS 1.2 : 0x000a OpenSSL 0-Length No (more info) TLS 1.2 : 0x000a Sleeping POODLE No (more info) TLS 1.2 : 0x000a Downgrade attack prevention Unknown (requires support for at least two protocols, excl. SSL2) SSL/TLS compression No RC4 Yes INSECURE (more info) Heartbeat (extension) Yes Heartbleed (vulnerability) No (more info) Ticketbleed (vulnerability) No (more info) OpenSSL CCS vuln. (CVE-2014-0224) No (more info) OpenSSL Padding Oracle vuln. (CVE-2016-2107) No (more info) ROBOT (vulnerability) No (more info) Forward Secrecy No WEAK (more info) ALPN No NPN No Session resumption (caching) Yes Session resumption (tickets) Yes OCSP stapling No Strict Transport Security (HSTS) No HSTS Preloading Not in: Chrome Edge Firefox IE Public Key Pinning (HPKP) No (more info) Public Key Pinning Report-Only No Public Key Pinning (Static) No (more info) Long handshake intolerance No TLS extension intolerance No TLS version intolerance No Incorrect SNI alerts No Uses common DH primes No, DHE suites not supported DH public server param (Ys) reuse No, DHE suites not supported ECDH public server param reuse No, ECDHE suites not supported Supported Named Groups - SSL 2 handshake compatibility No HTTP Requests 1 https://mondomaine.ly/ (HTTP/1.1 200 OK) Miscellaneous Test date Wed, 16 Jun 2021 16:55:27 UTC Test duration 199.208 seconds HTTP status code 200 HTTP server signature ?????? ???? ??????? Server hostname -
  20. Sherzod

    New Component

    Can you try this approach? unit uniCheckComboBoxTest; interface uses Data.DB, System.SysUtils, System.Classes, Vcl.Controls, Vcl.Forms, uniGUIBaseClasses, uniGUIClasses, uniMultiItem, uniComboBox, System.Variants, uniGUIApplication, Winapi.Windows, System.Generics.Collections, uniCheckBox, System.StrUtils, uniGUITypes; type TUniCheckComboBoxCustom = class(TUniCheckComboBox) private { Private declarations } //FCheckBox: TUniCheckBox; FCheckBoxChecked: Boolean; procedure CreateCheckBox; procedure SetCheckBoxChecked(const Value: Boolean); protected { Protected declarations } procedure JSEventHandler(AEventName: string; AParams: TUniStrings); override; procedure LoadCompleted; override; public { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; //property CheckBox: TUniCheckBox read FCheckBox write FCheckBox; property CheckBoxChecked: Boolean read FCheckBoxChecked write SetCheckBoxChecked; published { Published declarations } end; TUniCheckComboBoxTest = class(TUniCheckComboBoxCustom) end; procedure Register; implementation procedure Register; begin RegisterComponents('UniGUI Extension', [TUniCheckComboBoxTest]); end; { TUniComboBoxObject } constructor TUniCheckComboBoxCustom.Create(AOwner: TComponent); begin inherited Create(AOwner); FCheckBoxChecked := False; //if (not (csDesigning in ComponentState)) then //Self.CreateCheckBox; end; procedure TUniCheckComboBoxCustom.CreateCheckBox; begin // Self.FCheckBox := TUniCheckBox.Create(Self.Owner); // Self.FCheckBox.Parent := TWinControl(Self.Owner); // Self.FCheckBox.Width := 20; // Self.FCheckBox.Caption := ''; // Self.FCheckBox.Hint := 'Exceto'; // Self.FCheckBox.ShowHint := True; end; destructor TUniCheckComboBoxCustom.Destroy; begin inherited Destroy; end; procedure TUniCheckComboBoxCustom.JSEventHandler(AEventName: string; AParams: TUniStrings); begin inherited; if AEventName = '_checked' then FCheckBoxChecked := AParams.Values['checked'] = 'true'; end; procedure TUniCheckComboBoxCustom.LoadCompleted; begin inherited; //Self.FCheckBox.JSInterface.JSCall('alignTo', [Self.JSControl, 'tr?', JSInterface.JSStatement('[-35, 0]')]); JSInterface.JSCode(#1'.checkBoxEl = Ext.dom.Helper.insertBefore('#1'.inputEl, {'+ 'tag: "input", type: "checkbox"'+ IfThen(FCheckBoxChecked, ', checked: "checked"', '') + ',onclick: "ajaxRequest('#1', ''_checked'', {checked: this.checked})"'+ ',style: "position: absolute; font-size: 1.4em; bottom: 0; right: -3px; top: 1px;"'+ '}); ' ) end; procedure TUniCheckComboBoxCustom.SetCheckBoxChecked(const Value: Boolean); begin FCheckBoxChecked := Value; if not IsLoading then JSAssign('checkBoxEl.checked', [FCheckBoxChecked]); end; end.
  21. 1-Just read the uniGUI manual: http://unigui.com/doc/online_help/generate_a_self-signed_certifi.htm?zoom_highlightsub=certificate 2- Get a tutorial video on how domains, network and certificates works. Available in youtube 3- Self-sign, domain intranet will work IN YOUR INTRANET. Outside connection, nop. TLDR; Local, you can create. Domains, nop. That is basic of the basic. Use cloudflare. You can do more than that.
  22. Hello Ario, Good. 1. For PC client ( intranet), you have to export your new certificate from your server with : Win + R MMC Then import it to your PC client. That works fine for me. 2. For Android....Hummm... i did'nt succeed. I gave up. I just say to my customers to continue with this not secure site, when runing the url from mobile browser.
  23. I have discussion with my customer that UniGUI app interface is not responsive! He says you would better do job on bootstrap rather than on UniGUI ! But that bullsheet, I believe UniGUI quite powerfull to the things like that on the video ! SeeVideo How to repeat behaviour on the video? For the moment I know that to make interface responsive I should use client alighnment and layouts ! Also I have read amazing post of mohhamed here and think that is a good example of responsive interface. Besides, to change sizes of tiles like that on the video we should handle OnWindowResize event like this example Main.OnCreate UniApplication.UniSession.AddJS( 'Ext.EventManager.onWindowResize(function(sender,w, h){' +' var BrowserWidthValue=Ext.getBody().getViewSize().width; ' +' ajaxRequest(sender, ''GetBrowserWidth'', [ ''BrowserWidth=''+BrowserWidthValue, ''param1=B'' ]);' +Self.WebForm.JSName+'.setWidth(BrowserWidthValue);' +'Ext.getCmp( '''+pTopPanel.JSName+'''+''_id'').setWidth(BrowserWidthValue);' +'Ext.getCmp( '''+pBackGroundPanel.JSName+'''+''_id'').setWidth(BrowserWidthValue);' +'});' ); So, i am in the process of repeating such behaviour like that on the video and will post the results here. If you have such experience - share your ideas here. Regards,
  24. Solution: Self.CustomFiles.Add('https://maps.googleapis.com/maps/api/js?key=' + Self.KeyMaps + '&callback=gmNoop&libraries=geometry,places,visualization'); ServerModule.CustomMeta: <script> function gmNoop(){ console.log('GMap Callback'); }; </script>
  25. Hi Pals: I want to get rid of the secure message of the browers when my Customers use UniGui app inside a intranet. I use a self-signed certificate, but the browser complains because is not a know certificate authority. I use then the certificate of my Customer, but it not happy the browser. The certificate point to sebaotweb.sebaot.com. When use from internet works very fine. Internally are a transparent redirect on the dns to point sebaotweb.sebaot.com to the server using internal IP address. On the browser the url is the same if You are using from internet, but inside the net (intranet) the certificate is "insecure". Anybody knows how i can handle this problem? Thanks for all and Best Regards
×
×
  • Create New...