This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
1
Web Server - Ask For Help / Re: Anyone have passkeys implemented
« on: November 19, 2025, 02:29:15 PM »
Thanks, Sean.
I had rolled my own AD groups permissions for web apps before SecWin 7 was released and it works OK. I just took a quick look at SecWin 7's groups when it was released and couldn't see an easy way to make it work seamlessly for what I needed so stuck with what I already had.
Hope you're doing well.
Jane
I had rolled my own AD groups permissions for web apps before SecWin 7 was released and it works OK. I just took a quick look at SecWin 7's groups when it was released and couldn't see an easy way to make it work seamlessly for what I needed so stuck with what I already had.
Hope you're doing well.
Jane
2
Web Server - Ask For Help / Re: Anyone have passkeys implemented
« on: November 19, 2025, 10:07:50 AM »Quote
Secwin 7 has something akin to this
Good to know, Sean.
Off topic from the passkey question...
I played a very little bit with Secwin 7 when it first came out.
I couldn't find a way to assign permissions within an app to nested Active Directory groups, rather than to Secwin's own groups.
So to avoid more instruction for our IT people, I coded my own thing querying AD to get group membership for the person logging on and then assigning permissions in code. That way, when staff changes the IT people can just assign people to relevant AD groups and don't need to be familiar with my apps.
Not as flexible as far as changing what a particular group can do, but those group roles are rarely changed once an internal app is put into service.
Are you able to use AD groups (including nested groups) directly now in NetTalk with Secwin?
Jane
3
Web Server - Ask For Help / Re: Anyone have passkeys implemented
« on: November 18, 2025, 06:11:25 PM »
Not real passkeys.
What I have implemented on a few internal apps is use of a one-time token.
Somebody is logged into a SQL report server and part of running certain reports generates a GUID token in a SQL database. The table has an expiration date/time.
They can then link from the report server to one of my internal web apps with a URL that passes that token and specifies an internal "Connect" netWebPage.
The webHandler has an overload of p_web.Authenticate that just has a single parameter for pBearerToken.
That version of the method validates the token against the list in SQL. If valid, then it falls into my code for setting permissions and stuff just like a regular name/password login.
I'm sure there are more elegant options for passing the token.
What I did is
1. Create a NetWebPage which I call Connect
2. In the Connect page, there's a local variable
_token STRING(40)
3. In the Connect page, shortly after the CODE statement, I have the following code:
theWebAppURL/Connect?c=[THE TOKEN VALUE]
This was quicker to throw together for an internal app, rather than trying to come up with a correct implementation of basic authentication. But regardless of how you snag the token that's passed to you, you can use the pBearerToken version of p_web.Authenticate.
What I have implemented on a few internal apps is use of a one-time token.
Somebody is logged into a SQL report server and part of running certain reports generates a GUID token in a SQL database. The table has an expiration date/time.
They can then link from the report server to one of my internal web apps with a URL that passes that token and specifies an internal "Connect" netWebPage.
The webHandler has an overload of p_web.Authenticate that just has a single parameter for pBearerToken.
That version of the method validates the token against the list in SQL. If valid, then it falls into my code for setting permissions and stuff just like a regular name/password login.
I'm sure there are more elegant options for passing the token.
What I did is
1. Create a NetWebPage which I call Connect
2. In the Connect page, there's a local variable
_token STRING(40)
3. In the Connect page, shortly after the CODE statement, I have the following code:
Code: [Select]
_token = p_web.GetValue('c')
IF p_web.Authenticate(_token)
p_web.Script('window.location.replace("/IndexPage");')
ELSE
p_web.Script('window.location.replace("/LoginForm");')
END ! if 4. My SQL report has a link to pass the token to the web app theWebAppURL/Connect?c=[THE TOKEN VALUE]
This was quicker to throw together for an internal app, rather than trying to come up with a correct implementation of basic authentication. But regardless of how you snag the token that's passed to you, you can use the pBearerToken version of p_web.Authenticate.
4
Web Server - Ask For Help / Re: session values in NetWebService not visible???
« on: November 13, 2025, 07:28:57 PM »
Any time I've experienced such a thing, it's due to something that i screwed up.
Possibilities I can think of
1. Spelling error (compiler will not catch those for session values)
2. You're not in the same session that you think you're in
3. Something has changed or cleared the session value between when you set it and when you're trying to read it.
Some well-placed debug statements will show you the SessionID when you're setting and when you're trying to read.
If the values you're checking are not part of a specific session, try using SetHostValue instead.
Possibilities I can think of
1. Spelling error (compiler will not catch those for session values)
2. You're not in the same session that you think you're in
3. Something has changed or cleared the session value between when you set it and when you're trying to read it.
Some well-placed debug statements will show you the SessionID when you're setting and when you're trying to read.
If the values you're checking are not part of a specific session, try using SetHostValue instead.
5
Web Server - Ask For Help / Re: NetRefresh
« on: November 02, 2025, 12:14:04 PM »
Good job, Ron!
Every time I set up NetRefresh in an app I wind up forgetting some piece. Once the pieces (global template, webserver template, specific browse template, websockets, etc.) are all working, it works really well as long as it knows about changes.
But when I run a process that changes stuff in an embed or a separate procedure, I need to do the setTableValue thing.
One other caveat. Occasionally websockets doesn't work. If I completely kill chrome.exe (not just close a tab) and reopen it, it works again. That's rare and intermittent, but I have experienced it.
Jane
Every time I set up NetRefresh in an app I wind up forgetting some piece. Once the pieces (global template, webserver template, specific browse template, websockets, etc.) are all working, it works really well as long as it knows about changes.
But when I run a process that changes stuff in an embed or a separate procedure, I need to do the setTableValue thing.
One other caveat. Occasionally websockets doesn't work. If I completely kill chrome.exe (not just close a tab) and reopen it, it works again. That's rare and intermittent, but I have experienced it.
Jane
6
Web Server - Ask For Help / Re: NetRefresh
« on: October 31, 2025, 12:07:23 PM »
First thing would be to verify that you've got all the pieces of netrefresh working.
You could temporarily make a field on your browse EIP. When you update the field, it should show on another browser.
Once that's working, read the section of the docs on triggering a refresh from the webserver (i.e., in handcode) https://www.capesoft.com/docs/NetTalk14/NetTalkWebBasic.htm#NetRefresh
For example, for a browse using my umDischargeManagement table, after doing some processing I have
You could temporarily make a field on your browse EIP. When you update the field, it should show on another browser.
Once that's working, read the section of the docs on triggering a refresh from the webserver (i.e., in handcode) https://www.capesoft.com/docs/NetTalk14/NetTalkWebBasic.htm#NetRefresh
For example, for a browse using my umDischargeManagement table, after doing some processing I have
Code: [Select]
p_web.SetTableValue('umDischargeManagement',today() & '-' &clock())
7
Web Server - Ask For Help / Re: Proxy server for let's encrypt?
« on: September 07, 2025, 04:38:23 PM »
Thanks, Jeff.
I was concerned that your IT department might own the domain you're using, and thus control the DNS.
If you're able to register and own your own domain, that makes things a lot more flexible.
Glad you worked out a solution.
Jane
I was concerned that your IT department might own the domain you're using, and thus control the DNS.
If you're able to register and own your own domain, that makes things a lot more flexible.
Glad you worked out a solution.
Jane
8
Web Server - Ask For Help / Re: NetWebClient - post data?
« on: September 03, 2025, 09:02:06 AM »
Install Fiddler?
Try getting it to work with the NetDemo program and look at the detailed log there.
Temporarily compile your app with
NetShowSend=>1
and maybe NetShowReceive=>1
Try getting it to work with the NetDemo program and look at the detailed log there.
Temporarily compile your app with
NetShowSend=>1
and maybe NetShowReceive=>1
9
Web Server - Ask For Help / Re: Proxy server for let's encrypt?
« on: September 02, 2025, 07:27:36 PM »
Jeff,
What DNS provider are you using with the challenge?
What DNS provider are you using with the challenge?
10
Web Server - Ask For Help / Re: 2Step process - Bearer token - OAuth?
« on: September 01, 2025, 02:24:28 PM »
The one system I've got in production doing that, Johan, I wrote 7+ years ago and did my own thing rather than whatever OAuth was available at that time.
It's been working fine since.
I guess the question would be whether each of your customers has his own credentials, or whether you are contacting the API as you.
I think a lot of the rationale for OAuth is when you're acting on behalf of somebody else. In my app, that's not the case.
I have two generic procedures:
1. Checks the expiration of my existing token. Fetches a new token if the old one is within 5 minutes of expiry.
2. General API-calling NetTalk client. It's called by something else. It gets a token from the check-and-update-if-needed token procedure, then fills a StringTheory object with what's received from the API.
Then I have various procedures for individual API endpoints I need.
Each procedure constructs the URL with its parameters list. Then passes the URL, a String Theory object, and anything else needed to the api-calling procedure. When the latter has completed, the procedure parses the String Theory object and does its thing.
I posted more details a while back.
NOTE: I've fixed this code since then.
Instead of the custom header I was using in that old post, I now use ThisWebClient.Authorization
https://www.nettalkcentral.com/forum/index.php?topic=9562.msg39234#msg39234
It's been working fine since.
I guess the question would be whether each of your customers has his own credentials, or whether you are contacting the API as you.
I think a lot of the rationale for OAuth is when you're acting on behalf of somebody else. In my app, that's not the case.
I have two generic procedures:
1. Checks the expiration of my existing token. Fetches a new token if the old one is within 5 minutes of expiry.
2. General API-calling NetTalk client. It's called by something else. It gets a token from the check-and-update-if-needed token procedure, then fills a StringTheory object with what's received from the API.
Then I have various procedures for individual API endpoints I need.
Each procedure constructs the URL with its parameters list. Then passes the URL, a String Theory object, and anything else needed to the api-calling procedure. When the latter has completed, the procedure parses the String Theory object and does its thing.
I posted more details a while back.
NOTE: I've fixed this code since then.
Instead of the custom header I was using in that old post, I now use ThisWebClient.Authorization
Code: [Select]
! ThisWebClient.CustomHeader = 'Authorization: Bearer '&clip(pToken) !changed to ThisWebClient.Authorization 12/31/2024
ThisWebClient.Authorization = 'Bearer ' & clip(pToken)https://www.nettalkcentral.com/forum/index.php?topic=9562.msg39234#msg39234
11
Web Server - Ask For Help / Re: news.softvelocity.com is VERY VERY SLOW and not useable - am I the only one??
« on: August 20, 2025, 02:51:22 PM »Quote
Sv should opena Discord server !!!
Bruce has created one. It's fairly active.
12
Web Server - Ask For Help / Re: NT14 CLALIT2 - NetwebForm - Duplicate Record
« on: August 06, 2025, 06:17:06 PM »
Confirming that I get the same error as David with driver kit 1.06 and NT 14.34.
Updating a record in the Movies desktop example app from the driver kit works fine, but David's NetTalk form complains of duplicate key.
I didn't chase any further.
Updating a record in the Movies desktop example app from the driver kit works fine, but David's NetTalk form complains of duplicate key.
I didn't chase any further.
13
Web Server - Ask For Help / Re: Let's Encrypt issues
« on: August 05, 2025, 12:05:44 PM »
That's what it looks like to me, Jeff.
If you click the "Notify Server Challenge is Ready" link from your log https://acme-staging-v02.api.letsencrypt.org/acme/chall/218067634/18813677063/luoqhA
It says...
"error": {
"type": "urn:ietf:params:acme:error:connection",
"detail": "131.247.221.208: Fetching http://bcdb.usfbreastresearch.org/.well-known/acme-challenge/0XtYAnuLqEvkaYcPwYxNTwSqiGltTG172l_VnoY7Ac0: Timeout during connect (likely firewall problem)",
"status": 400
If you click the "Notify Server Challenge is Ready" link from your log https://acme-staging-v02.api.letsencrypt.org/acme/chall/218067634/18813677063/luoqhA
It says...
"error": {
"type": "urn:ietf:params:acme:error:connection",
"detail": "131.247.221.208: Fetching http://bcdb.usfbreastresearch.org/.well-known/acme-challenge/0XtYAnuLqEvkaYcPwYxNTwSqiGltTG172l_VnoY7Ac0: Timeout during connect (likely firewall problem)",
"status": 400
14
Web Server - Ask For Help / Re: How to debug this slow request?
« on: August 02, 2025, 05:02:21 PM »
I watched the webinar recording, Johan.
Helpful hint - Ctrl+Shift+X clears the log in debugview++
Helpful hint - Ctrl+Shift+X clears the log in debugview++
15
Web Server - Ask For Help / Re: How to debug this slow request?
« on: July 30, 2025, 07:12:20 AM »
Hi, Johan,
Not sure I'm understanding? Do you have a browse with an EIP column and the browse itself is slow to load?
Is the browse page-loaded or file-loaded? How many items are in the EIP dropdown list?
I think that the browse with EIP populates all the EIP possibilities for the column for each row. Which, if you have 15 rows in the browse, would mean it needs to process all of the rows for the EIP selections 15 times. If file-loaded, then for the entire browse. If you only have a few choices that might be reasonable, but if there's a long list there will be a lot of overhead.
When you use an update form, the EIP selections are only populated once when you open the form.
Not sure I'm understanding? Do you have a browse with an EIP column and the browse itself is slow to load?
Is the browse page-loaded or file-loaded? How many items are in the EIP dropdown list?
I think that the browse with EIP populates all the EIP possibilities for the column for each row. Which, if you have 15 rows in the browse, would mean it needs to process all of the rows for the EIP selections 15 times. If file-loaded, then for the entire browse. If you only have a few choices that might be reasonable, but if there's a long list there will be a lot of overhead.
When you use an update form, the EIP selections are only populated once when you open the form.