

omnibrain
Members-
Content Count
122 -
Joined
-
Last visited
Everything posted by omnibrain
-
Has anybody already implemented a MCP https://modelcontextprotocol.io/introduction Server in Delphi? Any tips, or quickstarts?
-
oauth Office365/Outlook.com Mail without Client Secret for public clients
omnibrain posted a topic in ICS - Internet Component Suite
We are currently redoing our mail module using ICS because Clever Internet Suite seems to be gone for good and The Office 365 sync components we used got bought out and rolled into a completely different solution. But because our software is a commercial business software that gets used by various end users I registered a "public client" (for "Multiple Organizations") for usage with the "Real O365 Mail for companies and schools", not personal accounts. But the ICS components need a Client_Secret (there are hardcoded checks) but if you send one, you won't get a token: {"error":"invalid_client","error_description":"AADSTS700025: Client is public so neither 'client_assertion' nor 'client_secret' should be presented. Trace ID: 4b38379d-3e12-485c-aff2-e0f450495800 Correlation ID: ad9abfcf-dac7-461f-a58d-b73136e07ae2 Timestamp: 2025-03-27 20:24:31Z","error_codes":[700025],"timestamp":"2025-03-27 20:24:31Z","trace_id":"4b38379d-3e12-485c-aff2-e0f450495800","correlation_id":"ad9abfcf-dac7-461f-a58d-b73136e07ae2"} I patched out the check of if (FClientId = '') or (FClientSecret = '') then begin it seems I got a valid token, but I'm not sure what else broke, because there definitely seems to be code that still attempts to send an empty client_secret with requests. -
oauth Office365/Outlook.com Mail without Client Secret for public clients
omnibrain replied to omnibrain's topic in ICS - Internet Component Suite
My colleague got it work mostly, by ad-hoc patching out every occurance of the ClientSecret, but of course that's not a clean solution, so I appreciate you looking into it. I will send you something to the Delphi@ email from the credit section -
oauth Office365/Outlook.com Mail without Client Secret for public clients
omnibrain replied to omnibrain's topic in ICS - Internet Component Suite
No, a public client doesn't have a ClientSecret. Only an ID and is created in Azure Entra ID (formerly know as Azure Active Directory) as Multiple organizations type Like I said, just commenting out the checks if there is a secret and submitting and setting an empty one seems to work. But I'm not deep enough in the component or the OAuth flow to know if something else breaks. It was too late to do further tests. I guess I will know next week. Take your time, but it would be nice, if you could take a look, when you are back at developing, so we don't have to patch ISC on our end. If we gather further information I will post here. -
oauth Office365/Outlook.com Mail without Client Secret for public clients
omnibrain replied to omnibrain's topic in ICS - Internet Component Suite
If you want to read more: https://learn.microsoft.com/en-us/entra/identity-platform/msal-client-applications But I think it should be enough to know that there are client types, that are only identified by ID but must not send a secret. The user of course still has to enter his credentials into the browser to authenticate, the client sends his ID, so the auth website can show "You are trying to give App XYZ access". Of course that's easy to impersonate, but that's what signed executables are for... It's all horribly complicated. -
That's exactly what it is for. Unified way of discovery and access. Anthropic wrote the spec but others, like Cursor adapted it. It's becoming some sort of standard way of tool and content discovery and access. It's a JSON RPC 2.0 API. If I want to integrate an agent into my software, I could do that. But I want to implemented several things: a) a way for any Agent to interact with (aspects of) my software. b) a MCP Server for the DBMS we use so I can use the (meta) information during development using agents or Cursor. This has nothing to do with MCPs, but most cloud systems use a REST API that's similar to OpenAI's. So no need for that. To use local LLMs there are a few competing approaches possible, but you can leave the heavy lifting to libraries like llama.cpp or even use something like ollama and just use this API.
-
Does anyone know what happened to OmniPascal?
-
Cannot connect IcsMQTTClient to PicoMQTT server
omnibrain replied to AndrzejBluszcz's topic in ICS - Internet Component Suite
I think first and foremost it should work against Eclipse Mosquitto, as it's more or less the reference implementation. https://test.mosquitto.org/ -
Access violations in OverbyteIcsHttpRestTst
omnibrain posted a topic in ICS - Internet Component Suite
To be able to debug a problem where one of my users can't reach some URLs (get's 404 despite beeing able to access the URLs in the browser on the same machine) I tried to compile OverbyteIcsHttpRestTst.dproj for him to see if the same error happens with this "reference implementation". But when I click "Start REST Request" I always get the same Access Violation: It doesn't matter if Release or Debug Build or 32 or 64 Bit. It just never works. I use Delphi 11.2 if that matters. -
Access violations in OverbyteIcsHttpRestTst
omnibrain replied to omnibrain's topic in ICS - Internet Component Suite
The line is already mentioned in the exception message in my first post. But next time I will pay special attention to this detail. So it was exactly what I hoped for. 😉 -
Access violations in OverbyteIcsHttpRestTst
omnibrain replied to omnibrain's topic in ICS - Internet Component Suite
I hoped it's just something like "Oh, I tried it and it happens on my end too, seems I overlooked xyz". There is nothing special, I think. It happens very time. function TIcsBuffLogStream.FlushFile(OldFName: Boolean = False): Integer; var HdrLine: String; Utf8Line: RawByteString; LineLen: Integer; LogHandle, Attempts: Integer; TickCount: Int64; { V8.71 } Bom : TBytes; begin Result := 0 ; FIdleTimer.Enabled := false; -
IcsMimeIsTextual doesn't work with content-type 'text'
omnibrain posted a topic in ICS - Internet Component Suite
I make heavy use of 'TSslHttpRest' for all kinds of requests, but with the recent update to ICS 9.4 (I skipped 9.3) some requests to plain text endpoints fail. I get 200 OK, but the responseraw is empty. I think the culprit is this: { V9.3 is a MIME type texual or printable text } function IcsMimeIsTextual(const MimeType: String): Boolean; begin Result := (Pos ('text/', MimeType) = 1) or (Pos ('json', MimeType) > 0) or (Pos ('javascript', MimeType) > 0) or (Pos ('xml', MimeType) > 0); end; I have to request some servers that answer with content-type 'text' instead of 'text/plain', so this function doesn't work for me. I'm not sure if you consider this a bug, because I think just 'text' is no "official" mime-type, but on the other hand, I have no control over the servers I have to query, so I would appreciate if there was a solution besides me manually patching the ICS code. -
IcsMimeIsTextual doesn't work with content-type 'text'
omnibrain replied to omnibrain's topic in ICS - Internet Component Suite
Thanks. Yes, strange, must be a coincidence then. Perhaps something changed at a server and I only noticed just now. -
SSL/TLS and Certificate Improvements
omnibrain replied to Angus Robertson's topic in ICS - Internet Component Suite
Yes. It's not only reverse-proxing ICS based servers/APIs, but also other processes and serving static files. Everything in one place. I can imagine others working like this as well. In my case Caddy handles the certificates (via ZeroSSL) automagically. -
SSL/TLS and Certificate Improvements
omnibrain replied to Angus Robertson's topic in ICS - Internet Component Suite
I'm having Caddy in front of everything. Our customers either use Caddy or nginx. -
I use ICS for most stuff. The little complaints I have usually get addressed fast.
-
PLABEL VCL Labelling, FlowChart and Technical Drawing editor
omnibrain replied to Alberto Fornés's topic in Delphi Third-Party
As far as I understand it they are for the label itself. I‘m interested in further „processing“ the SVG or a PNG. -
PLABEL VCL Labelling, FlowChart and Technical Drawing editor
omnibrain replied to Alberto Fornés's topic in Delphi Third-Party
I still enjoying trying out the components and have some first ideas but not enough time. But I have a few questions: The Demos seem to be a bit messed up pathwise. Difficult to describe, I think it's best if you do a clean install and open a Demo in Delphi yourself and then start it from within Delphi. You have SaveSVG and ExportDoc procedures. Both save to files. Is there a reason there is no option to save to a stream to continue processing the generated label directly in a program? Or am I overlooking something? I managed to hide almost all control elements of the editor component. But not the scrollbars. Am I overlooking something? I see that you can use a CSV file or JSON as Data Source. But is it also possible to use a TDataSet? -
PLABEL VCL Labelling, FlowChart and Technical Drawing editor
omnibrain replied to Alberto Fornés's topic in Delphi Third-Party
I ordered it because I have lots of ideas how to use it (especially the technical drawings) to augment our software. 🙂 Let's see how this goes. If nothing else our customers will be able to create nice labels 😉 -
I'm currently looking to integrate softphone functionality into our software. I'm looking for VoIP/SIP SDKs/components. 2 years ago I alreay tried (and even bought) Delphi SIP components but ran into trouble when the other side hanging up did not get registered correctly. I raised the issue with the developer but he soon stopped responding. It was easy to use, but at the same time rather limited. Now I found VoIP SIP SDK - ABTO Software's VoIP SIP SDK and VoIP SDK, SIP SDK for creating audio, video, and IM Apps (portsip.com) and VoIP für Unified Communications | GlobalIPTel and VaxVoIP SIP SDK - Develop SIP Softphone, webphone, video conferencing, audio conferencing, SIP Server, IPPBX, web dialer, SIP Tunneling Server, Call Recording Server, and IP-Telephony services. and SIP SDK for Windows (mizu-voip.com) Has any of you experience with either? Or can anyone recommenend another SDK/component? My first goal is to implement a softphone client with call recording and possibly audio playback. It should also be able to receive/decode DTMF tones. Possibly later I want to implement DIN CLC/TS 50134-9 "Social Alarm Systems"
-
sip Looking for VoIP/SIP client SDKs/components
omnibrain replied to omnibrain's topic in Delphi Third-Party
That one's initially very expensive... Do you know what renewals cost? -
TIcsMQTTClient.Publish does nothing for me.
omnibrain replied to APAPE's topic in ICS - Internet Component Suite
As far as I know Mosquitto is the reference implementation for MQTT. -
THttpAppSrv processing post despite failed basic auth
omnibrain posted a topic in ICS - Internet Component Suite
I'm currently developing an API using THttpAppSrv and custom programmed handlers. It's intendet to be used as a machine to machine API, so I use basic auth. TLS get's handled by a reverse proxy. I initialise the Component als follows: HttpAppSrv1.AuthTypes:=[atBasic]; HttpAppSrv1.AddGetHandler('/objects',Tlisaapirada); HttpAppSrv1.AddPostHandler('/objects',Tlisaapirada); HttpAppSrv1.Start(); My "getPassowrdHandler looks like this. "user" and "pass" are populated during startup of my program. procedure Tfio_lisaapi.HttpAppSrv1AuthGetPassword(Sender, Client: TObject; var Password: string); var ClientCnx : TMyHttpConnection; begin ClientCnx:=Client as TMyHttpConnection; if (ClientCnx.AuthTypes=[atBasic]) and (ClientCnx.AuthUserName=user) then Password := pass; end; My AuthResult just does some logging procedure Tfio_lisaapi.HttpAppSrv1AuthResult(Sender, Client: TObject; Success: Boolean); begin if Success then Display('Auth: true') else Display('Auth: false'); end; When I call my "/objects" endpoint (get and post) with the correct user name and password everything works as expected. Wenn I use a wrong username or password the "get" gets denied with a "401 Access Denied", as expected. But for the "post" my "Tlisaapirada.Execute" procedure gets called and executed. This should not happen, instead it should lead to a 401 as well. Do I miss some configuration on the THttpAppSrv component, or do I need to write special processing? -
Codolex 2.0 is now Free - Low-Code for Delphi
omnibrain replied to Jim McKeeth's topic in Delphi Third-Party
I don't 100% understand what this is. Is this a tool that creates code that you can adjust and then compile, or is this something you integrate (like a workflow engine) into an existing application? -
In the end each tool has their uses. 2 years ago I had to quickly add a customer portal to our software. A customer of one of our customers wanted to be able to access protocols and reports. Giving them direct access was no option. So I set up a DB server, built a custom periodic data export, and used a no/low code tool named Budibase to build a web frontend. Because I have total control over the data I export I could work around limitations regarding data representation by simply adjusting my export logic.