aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/user/user.go
blob: dbcbad0b5d7efd9a8588b08cb88a3f0919a63539 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* openbills - Server for web based Libre Billing Software
 * Copyright (C) 2023-2024  Vidhu Kant Sharma <vidhukant@vidhukant.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

package user

import (
	d "vidhukant.com/openbills/db"
	e "vidhukant.com/openbills/errors"
  u "vidhukant.com/openbills/util"
	"golang.org/x/crypto/bcrypt"
	"gorm.io/gorm"
	"github.com/spf13/viper"
	"errors"
)

var COST int
var db *gorm.DB
func init() {
	db = d.DB

	db.AutoMigrate(&User{})

	COST = viper.GetInt("cryptography.password_hashing_cost")
}

type User struct {
	gorm.Model
  u.Address
	TokenVersion  uint // this can be incremented to disable existing refresh token(s)
  FullName      string
  FirmName      string
  Gstin         string
  Phone         string
  Email         string
  Website       string
	Username      string
	Password      string
	LogoFile      string
	SignatureFile string
	IsVerified    bool // this should be removed and tokens should be issued upon verification
	// will be printed with address on the invoice
	Details       string
	// a note is printed on every invoice.
	// This is the default that gets automatically set
	DefaultInvoiceNote string
}

func CheckPassword(user *User, accountName, method, pass string) error {
	err := GetUserWithAccountName(user, accountName, method)
	if err != nil {
		return err
	}

	err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(pass))
	if err != nil {
		if errors.Is(err, bcrypt.ErrMismatchedHashAndPassword) {
			return e.ErrWrongPassword
		}

		return err
	}

	return nil
}