You are not logged in.
I'm trying to use the Authentication build into mormot, with the AuthGroup and AuthUser tables external in my own database ..
But calling SetUser results in an error because the LIMIT 1 addition is not corrected by a call to my own implementation of AdaptSQLLimitForEngineList() ..
See callstack below:
SQLite3DB.TSQLRestServerStaticExternal.ExecuteInlined('SELECT RowID,LogonName,DisplayName,PasswordHashHexa,GroupRights FROM AuthUser WHERE LogonName=:(''Guest''): LIMIT 1;',True)
SQLite3DB.TSQLRestServerStaticExternal.EngineList('SELECT RowID,LogonName,DisplayName,PasswordHashHexa,GroupRights FROM AuthUser WHERE LogonName=:(''Guest''): LIMIT 1;',False,nil)
SQLite3Commons.TSQLRestServer.InternalListJSON(TSQLAuthUser,'SELECT RowID,LogonName,DisplayName,PasswordHashHexa,GroupRights FROM AuthUser WHERE LogonName=:(''Guest''): LIMIT 1;')
SQLite3Commons.TSQLRest.Retrieve('LogonName=:(''Guest''):',$2643290)
SQLite3Commons.TSQLRecord.Create($2596260,'LogonName=?',(...))
SQLite3Commons.TSQLRestServer.Auth($18F464)
SQLite3Commons.TSQLRestServer.LaunchCallBack($18F464,'',400)
SQLite3Commons.TSQLRestServer.URI('root/auth?UserName=Guest&Password=2e4a799a589f4381206254b31517a86d5274bb3d39cd60f72c906d90a2bddbdc&ClientNonce=999a42861b620c0ee361d432c044b5bac72d39f6f89474f962a31fc99b3d8077','GET','','','',$99564D)
SQLite3.TSQLRestClientDB.InternalURI('root/auth?UserName=Guest&Password=2e4a799a589f4381206254b31517a86d5274bb3d39cd60f72c906d90a2bddbdc&ClientNonce=999a42861b620c0ee361d432c044b5bac72d39f6f89474f962a31fc99b3d8077','GET',$18F674 {''},$18F578 {''},$18F574 {''})
SQLite3Commons.TSQLRestClientURI.URI('root/auth?UserName=Guest&Password=2e4a799a589f4381206254b31517a86d5274bb3d39cd60f72c906d90a2bddbdc&ClientNonce=999a42861b620c0ee361d432c044b5bac72d39f6f89474f962a31fc99b3d8077','GET',$18F674 {''},nil {''},nil {''})
SQLite3Commons.TSQLRestClientURI.CallBackGet('auth',(...),'',nil,0,nil {''})
SQLite3Commons.TSQLRestClientURI.CallBackGetResult('auth',(...),nil,0)
SQLite3Commons.TSQLRestClientURI.SetUser('Guest','synopse',False)
Offline
Offline
But that one isnt called either ...
I have my own implementation in the TSQLDBNexusDBConnectionProperties class, so I don't have to change any code that is directly delivered by you. This means i have no merging to do when you publish a new version
Last edited by Bascy (2012-09-10 12:46:29)
Offline
AFAIK TSQLRestServerStaticExternal.AdaptSQLLimitForEngineList is always called, and will redirect to the TSQLDB*ConnectionProperties only for creating the SQL.
Use step-by-step debugging to see what the code does.
Offline
As you can see in the Callstack in the initial post, SQLite3Commons.TSQLRestServer.URI() is called, but before it reaches the call to AdaptSQLLimitForEngineList on line 18316 you see a call to SQLite3Commons.TSQLRestServer.LaunchCallBack($18F464,'',400) happening ...
Stepping through the code, the call to LaunchCallBack is made when executing line 18289
if (Method<>mLOCK) and
// GET ModelRoot/MethodName + parameters sent in URI
((URI.MethodIndex<0) or not LaunchCallBack(URI,Resp,result.Lo)) then
Last edited by Bascy (2012-09-10 14:02:38)
Offline
LaunchCallBack is made on purpose: it will call TSQLRestServer.Auth() method.
No problem here.
Within TSQLRestServer.Auth(), there is a request of TSQLRest.Retrieve('LogonName=:(''Guest''):',$2643290)
This will run on the server side directly, so it will call TSQLRestServerStaticExternal.EngineRetrieve() which will execute the statement.
I think there was an issue in this case: calling direct EngineList() will by-pass the AdaptSQLLimitForEngineList() call.
I've added a protected TSQLRestServer.InternalAdaptSQL method, extracted from URI() process to also be called by TSQLRestServer.InternalListJSON() for proper TSQLRestServerStatic.AdaptSQLForEngineList(SQL) call.
See http://synopse.info/fossil/info/c1285b2bee
Should fix the problem.
Offline