Ask a Question

OAuth 2 Automation and JDBC calls

Rmuenks1
New Contributor

OAuth 2 Automation and JDBC calls

Hi, I'm creating an OAuth 2 automation script to handle our login screen when calling an /api/jwt token retrieval.  When getting the token, our login pages appear, for which I have added 4 pages of Automation to handle entering User Name, Password, etc.

 

Page 1: Enter User Name screen

Page 2: Enter Password screen

Page 3: Request security token via Email or Text

Page 4: Enter valid security code which was received via Email or Text, and press Next

 

Once I reach Page 4, I realized I had no way of getting the security code which our website sends me. 

 

So I began to consider my options.  I felt like a JDBC call would work great and I could get the security token directly from the database.  When I tried creating JDBC calls within the OAuth Automation script profile, it began to throw all sorts of errors, not being able to import groovy.sql.Sql, seeing a Sql.newInstance call as ReferenceError: Can't find variable: Sql]

 

I thought maybe if I could call an outside Groovy script to return the value I might try that.  So I created a script file which works, but attempting this type of code in the OAuth 2 automation screen fails.  

 

MyDBServer = "<removed>"
MyUser = "<removed>"

MyDBName = "<removed>"

 

Mysql = Sql.newInstance('jdbc:sqlserver://' + MyDBServer + ':1433;databaseName='+MyDBName+';integratedSecurity=true','','','com.microsoft.sqlserver.jdbc.SQLServerDriver')
Mydata = Mysql.firstRow("SELECT MyCode FROM secured.MyAccessCodes AC JOIN secured.MyTable US ON AC.MyID = US.MyID Where US.UserName = '"+MyUser+"' and AC.ActiveFlag = 1")
log.info(Mydata)
Mysql.close()

 

Any suggestions?  I'd like to be able to add the database call directly into Step 4 of the OAuth 2 automation script in order to enter the security code into the window.  

8 REPLIES 8
richie
Community Hero

Hi @Rmuenks1,

I'm not a coder so i can't help with your groovy, but i wanted to confirm some points to rule out any issues with the SQL.

Your SQL is:
SELECT mycodes
FROM secured.myaccesscodes ac
JOIN
secured.mytable us
ON
ac.myid = us.myid
WHERE us.username = "'+myuser+'"
AND ac.activeflag = 1

Some RDBMSs struggle if you use partial aliasing. You've aliased everything but the initial column you are retrieving in your result set, so rather than 'select mycodes from', instead use 'select ac.mycodes from'.

Secondly i just wanted to ensure your notation is correct relative to the FROM and JOIN clauses.
Your FROM/JOIN clauses read

'FROM secured.myaccesscodes ac JOIN secured.mytable us'

Can you confirm 'secured' is the database name, so 'myaccesscodes' and 'mytable' are the table names? I struggled before using an earlier version of SoapUI (not ReadyAPI!) when i included the database name in the table identifier in my SQL. Once i removed the database name reference so my table identifiers included only the table, my SQL worked fine, but didn't when i included the databasename.

Cheers, sorry i can't comment on anything else,

Rich
if this helped answer the post, could you please mark it as 'solved'? Also if you consider whether the title of your post is relevant? Perhaps if the post is solved, it might make sense to update the Subject header field of the post to something more descriptive? This will help people when searching for problems. Ta

Thanks for the feedback regarding SQL, but this code works in a Groovy script. 

 

What I need help with is understanding in what ways the script editor inside the OAuth 2 profile GUI differs from the capabilities of a script inside a Groovy script. Also, if there is a limitation on what you can do within the OAuth 2 automation profile scripting, what options exist for making a SQL database call from within the automation profile to get our unique 6-digit security token during OAuth 2 automation profile to validate the user?

 

When running the code in the original post in the OAuth2 automation scripts GUI I get an error that says:

ReferenceError: Can't find variable: Sql]

 

if I use an "import Groovy.sql.Sql" at the beginning I get an error that says:  

Error: syntax error (scriptToValidate#1)

 

So, it seems like the "Automation scripts for OAuther 2 profile" screen has some limitations on what sort of code can execute within it, but I'm not finding anything in the documentation, or online, to indicate that limitation.

 

Thanks again!

Olga_T
SmartBear Alumni (Retired)

Hi all,

 

Thank you, @richie, for your reply.

 

@Rmuenks1, let me refer to some of our Community leaders, maybe they will be able to assist.

 

@groovyguy , @avidCoder , @nmrao , @HimanshuTayal, could you please have a look at the issue? Do you have any ideas or suggestions?

Community, feel free to post your comments!

 

Thanks everyone in advance!


Olga Terentieva
SmartBear Assistant Community Manager

@Rmuenks1 

 

Would you please provide the following?

 

1. Screen shot showing groovy script test along with script (fully visible). Also appreciate if you can attach the full script in text mode which will quickly help try.

 

2. Assuming that you are using MS SQL Server. What driver / library files available under ReadyAPI?

 

3. Full stacktrace of the error.



Regards,
Rao.
Rmuenks1
New Contributor

Hi,

 

So when I press "get the token" it opens up our login pages, so I created 'automation' scripts to handle those login screens.  Page 1 is the Enter User Name screen.  Page 2, the Enter Password screen, Page 3, the Request authentication code screen, and Page 4, the Enter authentication code screen.

 

What I'm trying to do is make a database call from within the automation script which goes to our database and gets the authentication token, rather than trying to get it from our emails, or text messages, which I would imagine is even harder to code into the automation script.  But the SQL calls I'm making in the script shown below work fine if I pull them out into a separate Groovy script, just not inside the Oath2 automation script.  So I'm curious why it's not working.  After I get the authorization code from the database I intended on putting that in the field on the screen and pressing submit.

 

Thank you,

Roy

 

Page 1
if (document.getElementById('txtUserName')) {
document.getElementById('txtUserName').value = '${#Project#Prop_UserName}';
document.getElementById('btnNext').click();
}


Page 2
if (document.getElementById('txtPassword')) {
document.getElementById('txtPassword').value = '${#Project#Prop_Password}';
document.getElementById('btnSignin').click();
}


Page 3
if (document.getElementById('MainContent_rblDeliveryMethods_0')) {
document.getElementById('MainContent_rblDeliveryMethods_0').click();
document.getElementById('btnRequestCode').click();
}


Page 4
if (document.getElementById('MainContent_AccessCodeRequiredFieldValidator')) {
MyDBServer = "<removed for security reasons>";
MyUser = "<removed for security reasons>";
Mysql = sql.newInstance('jdbc:sqlserver://' + MyDBServer + ':1433;databaseName=<removed for security reasons>;integratedSecurity=true','','','com.microsoft.sqlserver.jdbc.SQLServerDriver');
Mydata = Mysql.firstRow("SELECT AC.AccessCode FROM UserAccessCodes AC JOIN Users US ON AC.UserID = US.UserID Where US.UserName = '"+MyUser+"' and AC.ActiveFlag = 1");
AuthCode = Mydata;
Mysql.close();
document.getElementById('MainContent_AccessCodeRequiredFieldValidator').value = AuthCode;
document.getElementById('btnConfirmCode').click();
}

SoapUI_Automation.pngSoapUI_Error.png

TanyaYatskovska
SmartBear Alumni (Retired)

Thanks for the clarification, @Rmuenks1.

 

Community, @nmrao@richie@groovyguy@HimanshuTayal, what can we suggest?

---------
Tanya Yatskovskaya
SmartBear Community and Education Manager



TanyaYatskovska
SmartBear Alumni (Retired)

Hi @Rmuenks1,

 

It looks like this issue is very specific to your project. Could you please submit this question to our Support Team so that they can test it in our test lab? You can contact them here:

https://support.smartbear.com/message/?prod=ReadyAPI

---------
Tanya Yatskovskaya
SmartBear Community and Education Manager



cancel
Showing results for 
Search instead for 
Did you mean: