Added actual captcha testing

This commit is contained in:
2022-02-02 00:37:58 +03:00
parent 2ca9ac5145
commit 6eeaddfd37
9 changed files with 192 additions and 83 deletions

View File

@ -22,6 +22,9 @@ type DB struct {
Client *mongo.Client
}
type EmptyStruct struct {
}
var database DB = DB{}
func Init(URI string) (DB, error) {
@ -70,61 +73,3 @@ func (d *DB) Stop() {
panic(err)
}
}
func (d *DB) NewEntry(ctx context.Context, collectionName string, entry interface{}) error {
collection := d.Database.Collection(collectionName)
res, err := collection.InsertOne(ctx, entry)
if err != nil {
return err
}
log.Printf("New entry: %v\nDB ID: %v\n", entry, res.InsertedID)
return nil
}
func (d *DB) EntryExists(ctx context.Context, collectionName string, filter interface{}) bool {
collection := d.Database.Collection(collectionName)
var result bson.D
err := collection.FindOne(ctx, filter).Decode(&result)
if err != nil {
log.Printf("EntryExists error: %v", err)
}
return err != mongo.ErrNoDocuments
}
func (d *DB) ChatExists(ctx context.Context, chat Chat) bool {
filter := bson.D{primitive.E{Key: "id", Value: chat.Id}}
return d.EntryExists(ctx, "chats", filter)
}
func (d *DB) UserExists(ctx context.Context, user User) bool {
filter := bson.D{
primitive.E{Key: "id", Value: user.Id},
primitive.E{Key: "chat_id", Value: user.ChatId},
}
return d.EntryExists(ctx, "users", filter)
}
func (d *DB) NewChat(ctx context.Context, chat Chat) error {
if d.ChatExists(ctx, chat) {
return errors.New("chat entry already exists")
}
err := d.NewEntry(ctx, "chats", chat)
if err != nil {
log.Fatal(err)
return err
}
log.Printf("New chat added: %s (%d)\n", chat.Title, chat.Id)
return nil
}
func (d *DB) NewUser(ctx context.Context, user User) error {
if d.UserExists(ctx, user) {
return errors.New("user entry already exists")
}
err := d.NewEntry(ctx, "users", user)
if err != nil {
return err
}
log.Printf("New user: %v\n", user)
return nil
}

37
db/entry.go Normal file
View File

@ -0,0 +1,37 @@
package db
import (
"context"
"log"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
)
func (d *DB) GetEntry(ctx context.Context, collectionName string, filter interface{}) (interface{}, error) {
collection := d.Database.Collection(collectionName)
var result bson.D
err := collection.FindOne(ctx, filter).Decode(&result)
if err != nil {
return EmptyStruct{}, err
}
return result, nil
}
func (d *DB) NewEntry(ctx context.Context, collectionName string, entry interface{}) error {
collection := d.Database.Collection(collectionName)
res, err := collection.InsertOne(ctx, entry)
if err != nil {
return err
}
log.Printf("New entry: %v\nDB ID: %v\n", entry, res.InsertedID)
return nil
}
func (d *DB) EntryExists(ctx context.Context, collectionName string, filter interface{}) bool {
_, err := d.GetEntry(ctx, collectionName, filter)
if err != nil {
log.Printf("EntryExists error: %v", err)
}
return err != mongo.ErrNoDocuments
}

28
db/methods.go Normal file
View File

@ -0,0 +1,28 @@
package db
import (
"context"
"errors"
"log"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
func (d *DB) ChatExists(ctx context.Context, chat Chat) bool {
filter := bson.D{primitive.E{Key: "id", Value: chat.Id}}
return d.EntryExists(ctx, "chats", filter)
}
func (d *DB) NewChat(ctx context.Context, chat Chat) error {
if d.ChatExists(ctx, chat) {
return errors.New("chat entry already exists")
}
err := d.NewEntry(ctx, "chats", chat)
if err != nil {
log.Fatal(err)
return err
}
log.Printf("New chat added: %s (%d)\n", chat.Title, chat.Id)
return nil
}

View File

@ -14,4 +14,5 @@ type User struct {
CorrectAnswer int8 `bson:"correct_answer"`
CaptchaMessage int `bson:"captcha_message"`
IsBanned bool `bson:"is_banned"`
DateJoined int64 `bson:"date_joined"`
}

50
db/user.go Normal file
View File

@ -0,0 +1,50 @@
package db
import (
"context"
"errors"
"log"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
func makeIDFilter(user User) bson.D {
return bson.D{
primitive.E{Key: "id", Value: user.Id},
primitive.E{Key: "chat_id", Value: user.ChatId},
}
}
func (d *DB) UserExists(ctx context.Context, user User) bool {
filter := makeIDFilter(user)
return d.EntryExists(ctx, "users", filter)
}
func (d *DB) NewUser(ctx context.Context, user User) error {
if d.UserExists(ctx, user) {
return errors.New("user entry already exists")
}
err := d.NewEntry(ctx, "users", user)
if err != nil {
return err
}
log.Printf("New user: %v\n", user)
return nil
}
func (d *DB) GetUser(ctx context.Context, user User) (User, error) {
filter := makeIDFilter(user)
var result User
err := d.Database.Collection("users").FindOne(ctx, filter).Decode(&result)
if err != nil {
return User{}, err
}
return result, nil
}
func (d *DB) RemoveUser(ctx context.Context, user User) error {
filter := makeIDFilter(user)
_, err := d.Database.Collection("users").DeleteOne(ctx, filter)
return err
}