Merge pull request #37 from rr83019/master

Registration of App using email-id
This commit is contained in:
hrj 2019-06-11 23:17:55 +05:30 committed by GitHub
commit 39ce2056c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 81 additions and 1 deletions

23
client/index.html Normal file
View File

@ -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>

9
client/script.js Normal file
View File

@ -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;
})
})

24
client/style.css Normal file
View File

@ -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;
}

View File

@ -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 SET solved = True WHERE token = (SELECT m.token FROM mapId m, challenge c WHERE m.token=c.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()
} }