Minor fixes

- Used prepared statements and made them immutable
- Fixed indentation
This commit is contained in:
Sanjana Baliga 2018-06-14 10:57:06 +05:30
parent f73f2a762f
commit 223808ba98

View File

@ -13,13 +13,14 @@ trait ChallengeProvider {
class Captcha { class Captcha {
val con: Connection = DriverManager.getConnection("jdbc:h2:./captcha", "sa", "") val con: Connection = DriverManager.getConnection("jdbc:h2:./captcha", "sa", "")
val stmt: Statement = con.createStatement(); val stmt: Statement = con.createStatement()
stmt.execute("CREATE TABLE IF NOT EXISTS challenge(token varchar, id varchar, secret varchar, image blob)"); stmt.execute("CREATE TABLE IF NOT EXISTS challenge(token varchar, id varchar, secret varchar, image blob)")
val insertPstmt: PreparedStatement = con.prepareStatement("INSERT INTO challenge(token, id, secret) VALUES (?, ?, ?)")
val selectPstmt: PreparedStatement = con.prepareStatement("SELECT secret FROM challenge WHERE token = ?")
def getCaptcha(): Boolean = { def getCaptcha(): Boolean = {
val provider = new FilterChallenge val provider = new FilterChallenge
val (token, image) = this.getChallenge(provider) val (token, image) = this.getChallenge(provider)
val stmt: Statement = con.createStatement();
image.output(new File("Captcha.png")) image.output(new File("Captcha.png"))
println(s"Token: ${token}") println(s"Token: ${token}")
println("Enter your answer: ") println("Enter your answer: ")
@ -30,36 +31,32 @@ class Captcha {
def getChallenge(provider: ChallengeProvider): (String, Image) = { def getChallenge(provider: ChallengeProvider): (String, Image) = {
val (image, secret) = provider.returnChallenge() val (image, secret) = provider.returnChallenge()
val token = scala.util.Random.nextInt(10000).toString val token = scala.util.Random.nextInt(10000).toString
var pstmt: PreparedStatement = null insertPstmt.setString(1, token)
pstmt = con.prepareStatement("INSERT INTO challenge(token, id, secret) VALUES (?, ?, ?)") insertPstmt.setString(2, provider.id)
pstmt.setString(1, token) insertPstmt.setString(3, secret)
pstmt.setString(2, provider.id)
pstmt.setString(3, secret)
//TODO: insert image into database //TODO: insert image into database
pstmt.executeUpdate() insertPstmt.executeUpdate()
(token, image) (token, image)
} }
def getAnswer(token: String, answer: String, provider: ChallengeProvider): Boolean = { def getAnswer(token: String, answer: String, provider: ChallengeProvider): Boolean = {
val stmt: Statement = con.createStatement(); selectPstmt.setString(1, token)
val rs: ResultSet = stmt.executeQuery("SELECT secret FROM challenge WHERE token = "+token); val rs: ResultSet = selectPstmt.executeQuery()
rs.next() rs.next()
val secret = rs.getString("secret") val secret = rs.getString("secret")
provider.checkAnswer(secret, answer) provider.checkAnswer(secret, answer)
} }
def display(): Unit = { def display(): Unit = {
val stmt: Statement = con.createStatement(); val rs: ResultSet = stmt.executeQuery("SELECT * FROM challenge")
val rs: ResultSet = stmt.executeQuery("SELECT * FROM challenge"); println("token\t\tid\t\tsecret\t\timage")
while(rs.next()) {
println("token\t\tid\t\tsecret\t\timage"); val token = rs.getString("token")
while(rs.next()) { val id = rs.getString("id")
val token = rs.getString("token"); val secret = rs.getString("secret")
val id = rs.getString("id"); val image = rs.getString("image")
val secret = rs.getString("secret"); println(s"${token}\t\t${id}\t\t${secret}\t\t${image}")
val image = rs.getString("image"); }
println(s"${token}\t\t${id}\t\t${secret}\t\t${image}")
}
} }
def closeConnection(): Unit = { def closeConnection(): Unit = {