Conflict resolution
Signed-off-by: Rahul Rudragoudar <rr83019@gmail.com>
This commit is contained in:
parent
b9ef0c6d2e
commit
7c7285b9f7
|
@ -0,0 +1,23 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Libre Captcha</title>
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="header">
|
||||||
|
<h1>Libre Captcha</h1><hr>
|
||||||
|
<h2>Open Source solution to Captchas</h2>
|
||||||
|
<h3>v0.2 (Beta)</h3>
|
||||||
|
</div>
|
||||||
|
<div class="form">
|
||||||
|
<input type="text" id="email" placeholder="email">
|
||||||
|
<input type="button" id="reg-btn" value="Register">
|
||||||
|
<!-- <p id="token"></p> -->
|
||||||
|
</div>
|
||||||
|
<div class="secret">
|
||||||
|
<h4 id="token"></h4>
|
||||||
|
</div>
|
||||||
|
<script src="script.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,9 @@
|
||||||
|
document.getElementById("reg-btn").addEventListener("click", function(){
|
||||||
|
var email = document.getElementById("email").value;
|
||||||
|
var url = window.location.origin+"/v1/token?email="+email
|
||||||
|
fetch(url)
|
||||||
|
.then(res => res.json())
|
||||||
|
.then((data) => {
|
||||||
|
document.getElementById("token").innerHTML = "SECRET "+data.token;
|
||||||
|
})
|
||||||
|
})
|
|
@ -0,0 +1,24 @@
|
||||||
|
body {
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form {
|
||||||
|
width: 200px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form input {
|
||||||
|
width: 100%;
|
||||||
|
margin: 2px;
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#token {
|
||||||
|
margin: 10px;
|
||||||
|
padding: 3px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
|
@ -24,11 +24,13 @@ class Captcha(throttle: Int) {
|
||||||
val stmt: Statement = con.createStatement()
|
val stmt: Statement = con.createStatement()
|
||||||
stmt.execute("CREATE TABLE IF NOT EXISTS challenge(token varchar, id varchar, secret varchar, provider varchar, contentType varchar, image blob, solved boolean default False, PRIMARY KEY(token))")
|
stmt.execute("CREATE TABLE IF NOT EXISTS challenge(token varchar, id varchar, secret varchar, provider varchar, contentType varchar, image blob, solved boolean default False, PRIMARY KEY(token))")
|
||||||
stmt.execute("CREATE TABLE IF NOT EXISTS mapId(uuid varchar, token varchar, PRIMARY KEY(uuid), FOREIGN KEY(token) REFERENCES challenge(token))")
|
stmt.execute("CREATE TABLE IF NOT EXISTS mapId(uuid varchar, token varchar, PRIMARY KEY(uuid), FOREIGN KEY(token) REFERENCES challenge(token))")
|
||||||
|
stmt.execute("CREATE TABLE IF NOT EXISTS users(email varchar, hash int)")
|
||||||
val insertPstmt: PreparedStatement = con.prepareStatement("INSERT INTO challenge(token, id, secret, provider, contentType, image) VALUES (?, ?, ?, ?, ?, ?)")
|
val insertPstmt: PreparedStatement = con.prepareStatement("INSERT INTO challenge(token, id, secret, provider, contentType, image) VALUES (?, ?, ?, ?, ?, ?)")
|
||||||
val mapPstmt: PreparedStatement = con.prepareStatement("INSERT INTO mapId(uuid, token) VALUES (?, ?)")
|
val mapPstmt: PreparedStatement = con.prepareStatement("INSERT INTO mapId(uuid, token) VALUES (?, ?)")
|
||||||
val selectPstmt: PreparedStatement = con.prepareStatement("SELECT secret, provider FROM challenge WHERE token = ?")
|
val selectPstmt: PreparedStatement = con.prepareStatement("SELECT secret, provider FROM challenge WHERE token = ?")
|
||||||
val imagePstmt: PreparedStatement = con.prepareStatement("SELECT image FROM challenge c, mapId m WHERE c.token=m.token AND m.uuid = ?")
|
val imagePstmt: PreparedStatement = con.prepareStatement("SELECT image FROM challenge c, mapId m WHERE c.token=m.token AND m.uuid = ?")
|
||||||
val updatePstmt: PreparedStatement = con.prepareStatement("UPDATE challenge SET solved = True WHERE token = ?")
|
val updatePstmt: PreparedStatement = con.prepareStatement("UPDATE challenge c, mapId m SET c.solved = True WHERE c.token = m.token AND m.uuid = ?")
|
||||||
|
val userPstmt: PreparedStatement = con.prepareStatement("INSERT INTO users(email, hash) VALUES (?,?)")
|
||||||
|
|
||||||
val providers = Map("FilterChallenge" -> new FilterChallenge,
|
val providers = Map("FilterChallenge" -> new FilterChallenge,
|
||||||
"FontFunCaptcha" -> new FontFunCaptcha,
|
"FontFunCaptcha" -> new FontFunCaptcha,
|
||||||
|
@ -128,6 +130,16 @@ class Captcha(throttle: Int) {
|
||||||
providers(provider).checkAnswer(secret, answer.answer)
|
providers(provider).checkAnswer(secret, answer.answer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def getHash(email: String): Int = {
|
||||||
|
val secret = ""
|
||||||
|
val str = email+secret
|
||||||
|
val hash = str.hashCode()
|
||||||
|
userPstmt.setString(1, email)
|
||||||
|
userPstmt.setInt(2, hash)
|
||||||
|
userPstmt.executeUpdate()
|
||||||
|
hash
|
||||||
|
}
|
||||||
|
|
||||||
def display(): Unit = {
|
def display(): Unit = {
|
||||||
val rs: ResultSet = stmt.executeQuery("SELECT * FROM challenge")
|
val rs: ResultSet = stmt.executeQuery("SELECT * FROM challenge")
|
||||||
println("token\t\tid\t\tsecret\t\tsolved")
|
println("token\t\tid\t\tsecret\t\tsolved")
|
||||||
|
@ -149,6 +161,7 @@ case class Size(height: Int, width: Int)
|
||||||
case class Parameters(level: String, media: String, input_type: String, size: Option[Size])
|
case class Parameters(level: String, media: String, input_type: String, size: Option[Size])
|
||||||
case class Id(id: String)
|
case class Id(id: String)
|
||||||
case class Answer(answer: String, id: String)
|
case class Answer(answer: String, id: String)
|
||||||
|
case class Secret(token: Int)
|
||||||
|
|
||||||
class Server(port: Int){
|
class Server(port: Int){
|
||||||
val captcha = new Captcha(0)
|
val captcha = new Captcha(0)
|
||||||
|
@ -194,6 +207,17 @@ class Server(port: Int){
|
||||||
0
|
0
|
||||||
},"POST")
|
},"POST")
|
||||||
|
|
||||||
|
host.addContext("/v1/register", new FileContextHandler(new File("client/")))
|
||||||
|
|
||||||
|
host.addContext("/v1/token", (req,resp) => {
|
||||||
|
val params = req.getParams()
|
||||||
|
val hash = captcha.getHash(params.get("email"))
|
||||||
|
val token = Secret(hash)
|
||||||
|
resp.getHeaders().add("Content-Type", "application/json")
|
||||||
|
resp.send(200, write(token))
|
||||||
|
0
|
||||||
|
})
|
||||||
|
|
||||||
def start(): Unit = {
|
def start(): Unit = {
|
||||||
server.start()
|
server.start()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue