add register user
This commit is contained in:
		
							parent
							
								
									7dfe981b53
								
							
						
					
					
						commit
						3026f89f2e
					
				
							
								
								
									
										7
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								go.mod
									
									
									
									
									
								
							@ -5,6 +5,7 @@ go 1.19
 | 
				
			|||||||
require github.com/sirupsen/logrus v1.9.0
 | 
					require github.com/sirupsen/logrus v1.9.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
 | 
						github.com/golang-jwt/jwt/v5 v5.0.0-rc.2 // indirect
 | 
				
			||||||
	github.com/jackc/chunkreader/v2 v2.0.1 // indirect
 | 
						github.com/jackc/chunkreader/v2 v2.0.1 // indirect
 | 
				
			||||||
	github.com/jackc/pgconn v1.14.0 // indirect
 | 
						github.com/jackc/pgconn v1.14.0 // indirect
 | 
				
			||||||
	github.com/jackc/pgio v1.0.0 // indirect
 | 
						github.com/jackc/pgio v1.0.0 // indirect
 | 
				
			||||||
@ -29,8 +30,8 @@ require (
 | 
				
			|||||||
	github.com/pmezard/go-difflib v1.0.0 // indirect
 | 
						github.com/pmezard/go-difflib v1.0.0 // indirect
 | 
				
			||||||
	github.com/stretchr/objx v0.5.0 // indirect
 | 
						github.com/stretchr/objx v0.5.0 // indirect
 | 
				
			||||||
	github.com/stretchr/testify v1.8.1 // indirect
 | 
						github.com/stretchr/testify v1.8.1 // indirect
 | 
				
			||||||
	golang.org/x/crypto v0.6.0 // indirect
 | 
						golang.org/x/crypto v0.8.0 // indirect
 | 
				
			||||||
	golang.org/x/sys v0.5.0 // indirect
 | 
						golang.org/x/sys v0.7.0 // indirect
 | 
				
			||||||
	golang.org/x/text v0.7.0 // indirect
 | 
						golang.org/x/text v0.9.0 // indirect
 | 
				
			||||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
						gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										8
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								go.sum
									
									
									
									
									
								
							@ -11,6 +11,8 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb
 | 
				
			|||||||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
 | 
					github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
 | 
				
			||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 | 
					github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 | 
				
			||||||
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
 | 
					github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
 | 
				
			||||||
 | 
					github.com/golang-jwt/jwt/v5 v5.0.0-rc.2 h1:hXPcSazn8wKOfSb9y2m1bdgUMlDxVDarxh3lJVbC6JE=
 | 
				
			||||||
 | 
					github.com/golang-jwt/jwt/v5 v5.0.0-rc.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
 | 
				
			||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 | 
					github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 | 
				
			||||||
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
 | 
					github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
 | 
				
			||||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
 | 
					github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
 | 
				
			||||||
@ -151,6 +153,8 @@ golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8=
 | 
				
			|||||||
golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80=
 | 
					golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80=
 | 
				
			||||||
golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
 | 
					golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
 | 
				
			||||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
 | 
					golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
 | 
				
			||||||
 | 
					golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ=
 | 
				
			||||||
 | 
					golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
 | 
				
			||||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 | 
					golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 | 
				
			||||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
					golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
				
			||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
					golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 | 
				
			||||||
@ -186,6 +190,8 @@ golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
 | 
				
			|||||||
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
					golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
 | 
					golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
 | 
				
			||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
					golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 | 
					golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 | 
				
			||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
					golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
				
			||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
					golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
				
			||||||
@ -200,6 +206,8 @@ golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM=
 | 
				
			|||||||
golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 | 
					golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 | 
				
			||||||
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
 | 
					golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
 | 
				
			||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 | 
					golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 | 
				
			||||||
 | 
					golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
 | 
				
			||||||
 | 
					golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
					golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
					golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 | 
					golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 | 
				
			||||||
 | 
				
			|||||||
@ -92,7 +92,7 @@ func (f *Filmsrepo) FindById(id string) (*model.Films, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (f *Filmsrepo) FindByName(name string) (*[]model.Films, error) {
 | 
					func (f *Filmsrepo) FindByName(name string) (*[]model.Films, error) {
 | 
				
			||||||
	var films []model.Films
 | 
						var films []model.Films
 | 
				
			||||||
	rows, err := f.db.db.Query(context.Background(), "SELECT * FROM films WHERE ru_title LIKE %$1%;", name)
 | 
						rows, err := f.db.db.Query(context.Background(), "SELECT id, Ru_title, year,  posterurl, content_type FROM films WHERE ru_title LIKE $1;", "%"+name+"%")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -100,10 +100,7 @@ func (f *Filmsrepo) FindByName(name string) (*[]model.Films, error) {
 | 
				
			|||||||
	defer rows.Close()
 | 
						defer rows.Close()
 | 
				
			||||||
	for rows.Next() {
 | 
						for rows.Next() {
 | 
				
			||||||
		var film model.Films
 | 
							var film model.Films
 | 
				
			||||||
		err = rows.Scan(&film.Id, &film.Ru_title, &film.Orig_title, &film.Imdb_id, &film.Kinopoisk_id,
 | 
							err = rows.Scan(&film.Id, &film.Ru_title, &film.Year, &film.PosterUrl, &film.Contenttype)
 | 
				
			||||||
			&film.PosterUrl, &film.PosterUrlPreview, &film.Countries, &film.Genres, &film.Year,
 | 
					 | 
				
			||||||
			&film.Description, &film.RatingKinopoisk, &film.RatingImdb, &film.Iframe_src, &film.RatingImdbVoteCount,
 | 
					 | 
				
			||||||
			&film.RatingKinopoiskVoteCount, &film.Created, &film.Media)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return nil, err
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,10 +2,9 @@ package model
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
type User struct {
 | 
					type User struct {
 | 
				
			||||||
	Id           int
 | 
						Id           int
 | 
				
			||||||
	Login        string
 | 
						Login        string `json:"login"`
 | 
				
			||||||
	Email        string
 | 
						Email        string `json:"email"`
 | 
				
			||||||
	Password     string
 | 
						Password     string `json:"password"`
 | 
				
			||||||
	Avatar_Url   string
 | 
						Avatar_Url   string
 | 
				
			||||||
	Token        string
 | 
					 | 
				
			||||||
	PermisionLVL int
 | 
						PermisionLVL int
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -125,17 +125,14 @@ func (s *Siriesrepo) FindByAll() (*[]model.Siries, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (s *Siriesrepo) FindByName(name string) (*[]model.Siries, error) {
 | 
					func (s *Siriesrepo) FindByName(name string) (*[]model.Siries, error) {
 | 
				
			||||||
	var buffs []model.Siries
 | 
						var buffs []model.Siries
 | 
				
			||||||
	rows, err := s.db.db.Query(context.Background(), "SELECT * FROM siries WHERE ru_title LIKE $1", "%"+name+"%")
 | 
						rows, err := s.db.db.Query(context.Background(), "SELECT id, Ru_title, year,  posterurl, content_type FROM siries WHERE ru_title LIKE $1;", "%"+name+"%")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	defer rows.Close()
 | 
						defer rows.Close()
 | 
				
			||||||
	for rows.Next() {
 | 
						for rows.Next() {
 | 
				
			||||||
		var buff model.Siries
 | 
							var buff model.Siries
 | 
				
			||||||
		err = rows.Scan(&buff.Id, &buff.Ru_title, &buff.Orig_title, &buff.Imdb_id, &buff.Kinopoisk_id,
 | 
							err = rows.Scan(&buff.Id, &buff.Ru_title, &buff.Year, &buff.PosterUrl, &buff.Contenttype)
 | 
				
			||||||
			&buff.PosterUrl, &buff.PosterUrlPreview, &buff.Countries, &buff.Genres, &buff.Year,
 | 
					 | 
				
			||||||
			&buff.Description, &buff.RatingKinopoisk, &buff.RatingImdb, &buff.Iframe_src, &buff.RatingImdbVoteCount,
 | 
					 | 
				
			||||||
			&buff.RatingKinopoiskVoteCount, &buff.Created, &buff.Translations, &buff.Episodes)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return nil, err
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -11,27 +11,55 @@ type Userrepo struct {
 | 
				
			|||||||
	db Bd
 | 
						db Bd
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (u *Userrepo) Create(user *model.User) (*model.User, error) {
 | 
					func (u *Userrepo) Create(user *model.User) error {
 | 
				
			||||||
	err := u.db.db.QueryRow(context.Background(),
 | 
						_, err := u.db.db.Exec(context.Background(),
 | 
				
			||||||
		"INSERT INTO users (id, login, email, password, avatar_url, token, permisionlvl) VALUES($1, $2, $3, $4, $5, $6, $7) RETURNING id, permisionlvl", user.Id, user.Login, user.Email, user.Password, user.Avatar_Url, user.Token, user.PermisionLVL).
 | 
							"INSERT INTO users (login, email, password, permisionlvl) VALUES($1, $2, $3, $4)", user.Login, user.Email, user.Password, user.PermisionLVL)
 | 
				
			||||||
		Scan(&user.Id, &user.PermisionLVL)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return user, nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (u *Userrepo) FindById(id string) (*model.User, error) {
 | 
					func (u *Userrepo) FindById(id string) (*model.User, error) {
 | 
				
			||||||
	var user model.User
 | 
						var user model.User
 | 
				
			||||||
	query := fmt.Sprintf("SELECT * FROM users  WHERE Id = %s;", id)
 | 
						query := fmt.Sprintf("SELECT * FROM users  WHERE Id = %s;", id)
 | 
				
			||||||
	err := u.db.db.QueryRow(context.Background(), query).
 | 
						err := u.db.db.QueryRow(context.Background(), query).
 | 
				
			||||||
		Scan(user.Id, user.Login, user.Email, user.Password, user.Avatar_Url, user.Token, user.PermisionLVL)
 | 
							Scan(user.Id, user.Login, user.Email, user.Password, user.Avatar_Url, user.PermisionLVL)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return &user, nil
 | 
						return &user, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (u *Userrepo) FindByLogin(login string) (*model.User, error) {
 | 
				
			||||||
 | 
						var user model.User
 | 
				
			||||||
 | 
						rows, err := u.db.db.Query(context.Background(), "SELECT login FROM users  WHERE login = $1", login)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						defer rows.Close()
 | 
				
			||||||
 | 
						for rows.Next() {
 | 
				
			||||||
 | 
							err = rows.Scan(&user.Login)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &user, nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (u *Userrepo) FindByEmail(email string) (*model.User, error) {
 | 
				
			||||||
 | 
						var user model.User
 | 
				
			||||||
 | 
						rows, err := u.db.db.Query(context.Background(), "SELECT email FROM users  WHERE email = $1", email)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						defer rows.Close()
 | 
				
			||||||
 | 
						for rows.Next() {
 | 
				
			||||||
 | 
							err = rows.Scan(&user.Email)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &user, nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (u *Userrepo) FindByAll() (*model.User, error) {
 | 
					func (u *Userrepo) FindByAll() (*model.User, error) {
 | 
				
			||||||
	return nil, nil
 | 
						return nil, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -31,6 +31,8 @@ func (r *RestServer) HandleHello() http.HandlerFunc {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
 | 
							w.WriteHeader(http.StatusNotFound)
 | 
				
			||||||
		io.WriteString(w, strconv.Itoa(*cout))
 | 
							io.WriteString(w, strconv.Itoa(*cout))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -62,21 +64,33 @@ func (r *RestServer) HendleFindAll() http.HandlerFunc {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (r *RestServer) HeandleFilmsFindName() http.HandlerFunc {
 | 
					func (r *RestServer) HeandleFilmsFindName() http.HandlerFunc {
 | 
				
			||||||
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
		name := mux.Vars(res)["name"]
 | 
							name := mux.Vars(res)["name"]
 | 
				
			||||||
		films, err := r.db.Films().FindByName(name)
 | 
							films, err := r.db.Films().FindByName(name)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								r.logger.Errorln(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		jsonData, err := json.Marshal(films)
 | 
							if *films != nil {
 | 
				
			||||||
		if err != nil {
 | 
								jsonData, err := json.Marshal(films)
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								if err != nil {
 | 
				
			||||||
 | 
									r.logger.Errorln(err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								io.WriteString(w, string(jsonData))
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								io.WriteString(w, string(`[]`))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		io.WriteString(w, string(jsonData))
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (r *RestServer) HeandleFilmsSortGenres() http.HandlerFunc {
 | 
					func (r *RestServer) HeandleFilmsSortGenres() http.HandlerFunc {
 | 
				
			||||||
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
		name := mux.Vars(res)["name"]
 | 
							name := mux.Vars(res)["name"]
 | 
				
			||||||
		films, err := r.db.Films().SortByGanres(name)
 | 
							films, err := r.db.Films().SortByGanres(name)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@ -92,6 +106,9 @@ func (r *RestServer) HeandleFilmsSortGenres() http.HandlerFunc {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (r *RestServer) HendleFindID() http.HandlerFunc {
 | 
					func (r *RestServer) HendleFindID() http.HandlerFunc {
 | 
				
			||||||
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
		id := mux.Vars(res)["id"]
 | 
							id := mux.Vars(res)["id"]
 | 
				
			||||||
		fmt.Println(mux.Vars(res))
 | 
							fmt.Println(mux.Vars(res))
 | 
				
			||||||
		film, err := r.db.Films().FindById(id)
 | 
							film, err := r.db.Films().FindById(id)
 | 
				
			||||||
@ -102,14 +119,16 @@ func (r *RestServer) HendleFindID() http.HandlerFunc {
 | 
				
			|||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								r.logger.Errorln(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
					
 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
					 | 
				
			||||||
		io.WriteString(w, string(jsonData))
 | 
							io.WriteString(w, string(jsonData))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (r *RestServer) HendlePagination() http.HandlerFunc {
 | 
					func (r *RestServer) HendlePagination() http.HandlerFunc {
 | 
				
			||||||
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
		id := mux.Vars(res)["page"]
 | 
							id := mux.Vars(res)["page"]
 | 
				
			||||||
		films, err := r.db.Films().Pagination(id)
 | 
							films, err := r.db.Films().Pagination(id)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@ -119,8 +138,6 @@ func (r *RestServer) HendlePagination() http.HandlerFunc {
 | 
				
			|||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								r.logger.Errorln(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
					 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
					 | 
				
			||||||
		io.WriteString(w, string(jsondata))
 | 
							io.WriteString(w, string(jsondata))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -128,6 +145,9 @@ func (r *RestServer) HendlePagination() http.HandlerFunc {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (r *RestServer) HeadleGetLastItem() http.HandlerFunc {
 | 
					func (r *RestServer) HeadleGetLastItem() http.HandlerFunc {
 | 
				
			||||||
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
		films, err := r.db.Films().LastItem()
 | 
							films, err := r.db.Films().LastItem()
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								r.logger.Errorln(err)
 | 
				
			||||||
@ -136,8 +156,6 @@ func (r *RestServer) HeadleGetLastItem() http.HandlerFunc {
 | 
				
			|||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								r.logger.Errorln(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
					 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
					 | 
				
			||||||
		io.WriteString(w, string(jsondata))
 | 
							io.WriteString(w, string(jsondata))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -8,6 +8,13 @@ import (
 | 
				
			|||||||
	"github.com/sirupsen/logrus"
 | 
						"github.com/sirupsen/logrus"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						ContextKeyUser = iota
 | 
				
			||||||
 | 
						defaultPermLvl = 1
 | 
				
			||||||
 | 
						writerPermLvl  = 2
 | 
				
			||||||
 | 
						adminPermLvl   = 3
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type RestServer struct {
 | 
					type RestServer struct {
 | 
				
			||||||
	config *Config
 | 
						config *Config
 | 
				
			||||||
	logger *logrus.Logger
 | 
						logger *logrus.Logger
 | 
				
			||||||
 | 
				
			|||||||
@ -23,14 +23,15 @@ func (r *RestServer) configureRouterSiries() {
 | 
				
			|||||||
func (r *RestServer) HandleHelloSiries() http.HandlerFunc {
 | 
					func (r *RestServer) HandleHelloSiries() http.HandlerFunc {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
		id := res.URL.Query().Get("id")
 | 
							id := res.URL.Query().Get("id")
 | 
				
			||||||
		fmt.Println(id)
 | 
							fmt.Println(id)
 | 
				
			||||||
		cout, err := r.db.Siries().GetCountFilms()
 | 
							cout, err := r.db.Siries().GetCountFilms()
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								r.logger.Errorln(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
					 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
					 | 
				
			||||||
		io.WriteString(w, strconv.Itoa(*cout))
 | 
							io.WriteString(w, strconv.Itoa(*cout))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -62,21 +63,32 @@ func (r *RestServer) HendleFindAllSiries() http.HandlerFunc {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (r *RestServer) HeandleSiriesFindName() http.HandlerFunc {
 | 
					func (r *RestServer) HeandleSiriesFindName() http.HandlerFunc {
 | 
				
			||||||
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
		name := mux.Vars(res)["name"]
 | 
							name := mux.Vars(res)["name"]
 | 
				
			||||||
		siries, err := r.db.Siries().FindByName(name)
 | 
							siries, err := r.db.Siries().FindByName(name)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								r.logger.Errorln(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		jsonData, err := json.Marshal(siries)
 | 
							if *siries != nil {
 | 
				
			||||||
		if err != nil {
 | 
								jsonData, err := json.Marshal(siries)
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								if err != nil {
 | 
				
			||||||
 | 
									r.logger.Errorln(err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								io.WriteString(w, string(jsonData))
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								io.WriteString(w, string(`[]`))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		io.WriteString(w, string(jsonData))
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (r *RestServer) HeandleSiriesSortGenres() http.HandlerFunc {
 | 
					func (r *RestServer) HeandleSiriesSortGenres() http.HandlerFunc {
 | 
				
			||||||
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
		name := mux.Vars(res)["name"]
 | 
							name := mux.Vars(res)["name"]
 | 
				
			||||||
		siries, err := r.db.Siries().SortByGanres(name)
 | 
							siries, err := r.db.Siries().SortByGanres(name)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@ -92,6 +104,9 @@ func (r *RestServer) HeandleSiriesSortGenres() http.HandlerFunc {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (r *RestServer) HendleFindIDSiries() http.HandlerFunc {
 | 
					func (r *RestServer) HendleFindIDSiries() http.HandlerFunc {
 | 
				
			||||||
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
		id := mux.Vars(res)["id"]
 | 
							id := mux.Vars(res)["id"]
 | 
				
			||||||
		fmt.Println(mux.Vars(res))
 | 
							fmt.Println(mux.Vars(res))
 | 
				
			||||||
		siries, err := r.db.Siries().FindById(id)
 | 
							siries, err := r.db.Siries().FindById(id)
 | 
				
			||||||
@ -102,14 +117,15 @@ func (r *RestServer) HendleFindIDSiries() http.HandlerFunc {
 | 
				
			|||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								r.logger.Errorln(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
					 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
					 | 
				
			||||||
		io.WriteString(w, string(jsonData))
 | 
							io.WriteString(w, string(jsonData))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (r *RestServer) HendlePaginationSiries() http.HandlerFunc {
 | 
					func (r *RestServer) HendlePaginationSiries() http.HandlerFunc {
 | 
				
			||||||
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
		id := mux.Vars(res)["page"]
 | 
							id := mux.Vars(res)["page"]
 | 
				
			||||||
		siries, err := r.db.Siries().Pagination(id)
 | 
							siries, err := r.db.Siries().Pagination(id)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@ -119,8 +135,6 @@ func (r *RestServer) HendlePaginationSiries() http.HandlerFunc {
 | 
				
			|||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								r.logger.Errorln(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
					 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
					 | 
				
			||||||
		io.WriteString(w, string(jsondata))
 | 
							io.WriteString(w, string(jsondata))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -128,6 +142,9 @@ func (r *RestServer) HendlePaginationSiries() http.HandlerFunc {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (r *RestServer) HeadleGetLastItemSiries() http.HandlerFunc {
 | 
					func (r *RestServer) HeadleGetLastItemSiries() http.HandlerFunc {
 | 
				
			||||||
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
		siries, err := r.db.Siries().LastItem()
 | 
							siries, err := r.db.Siries().LastItem()
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								r.logger.Errorln(err)
 | 
				
			||||||
@ -136,8 +153,6 @@ func (r *RestServer) HeadleGetLastItemSiries() http.HandlerFunc {
 | 
				
			|||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								r.logger.Errorln(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
					 | 
				
			||||||
		w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
					 | 
				
			||||||
		io.WriteString(w, string(jsondata))
 | 
							io.WriteString(w, string(jsondata))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,36 +1,49 @@
 | 
				
			|||||||
package restserver
 | 
					package restserver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"io"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.ukamnya.ru/stulyaganov/RestApiv2/internal/bd/model"
 | 
						"git.ukamnya.ru/stulyaganov/RestApiv2/internal/bd/model"
 | 
				
			||||||
 | 
						"git.ukamnya.ru/stulyaganov/RestApiv2/pkg/utils/password"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (r *RestServer) configureRouterUser() {
 | 
					func (r *RestServer) configureRouterUser() {
 | 
				
			||||||
	r.router.HandleFunc("/api/register", r.HandleFuncRegUser()).Methods("POST")
 | 
						r.router.HandleFunc("/api/register", r.chekUserRegistr(r.HandleFuncRegUser())).Methods("POST")
 | 
				
			||||||
 | 
						r.router.HandleFunc("/api/login", r.HandleFuncLoginUser()).Methods("POST")
 | 
				
			||||||
 | 
						r.router.HandleFunc("/api/logout", r.HandleFuncLogOutUser()).Methods("POST")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (r *RestServer) HandleFuncRegUser() http.HandlerFunc {
 | 
					func (r *RestServer) HandleFuncRegUser() http.HandlerFunc {
 | 
				
			||||||
	return func(w http.ResponseWriter, res *http.Request) {
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
		user := model.User{}
 | 
							users := res.Context().Value(ContextKeyUser).(*model.User)
 | 
				
			||||||
		err := res.ParseForm()
 | 
					
 | 
				
			||||||
 | 
							hash, err := password.HashPassword(users.Password)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Error(err)
 | 
								r.logger.Error(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		user.Id = 1
 | 
							users.Password = string(*hash)
 | 
				
			||||||
		user.Login = res.Form.Get("user")
 | 
							err = r.db.User().Create(users)
 | 
				
			||||||
		user.Password = res.Form.Get("password")
 | 
					 | 
				
			||||||
		user.Email = res.Form.Get("email")
 | 
					 | 
				
			||||||
		user.PermisionLVL = 1
 | 
					 | 
				
			||||||
		user.Token = "dasf2!23sfafaQWerq"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		RetUser, err := r.db.User().Create(&user)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			r.logger.Errorln(err)
 | 
								r.logger.Error(err)
 | 
				
			||||||
		}
 | 
							} else {
 | 
				
			||||||
		if RetUser != nil {
 | 
								io.WriteString(w, `{"data":"Пользователь создан"}`)
 | 
				
			||||||
			r.logger.Infoln("Create new user with id = ", RetUser.Id, " and with permissionLvl = ", RetUser.Id)
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (r *RestServer) HandleFuncLoginUser() http.HandlerFunc {
 | 
				
			||||||
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							fmt.Println("login")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (r *RestServer) HandleFuncLogOutUser() http.HandlerFunc {
 | 
				
			||||||
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							fmt.Println("login")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										49
									
								
								internal/restserver/usermidleware.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								internal/restserver/usermidleware.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
				
			|||||||
 | 
					package restserver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"encoding/json"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"io"
 | 
				
			||||||
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"git.ukamnya.ru/stulyaganov/RestApiv2/internal/bd/model"
 | 
				
			||||||
 | 
						"git.ukamnya.ru/stulyaganov/RestApiv2/pkg/utils/validator"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (r *RestServer) chekUserRegistr(next http.HandlerFunc) http.HandlerFunc {
 | 
				
			||||||
 | 
						return func(w http.ResponseWriter, res *http.Request) {
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Origin", "*")
 | 
				
			||||||
 | 
							w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", "application/json")
 | 
				
			||||||
 | 
							users := &model.User{}
 | 
				
			||||||
 | 
							valid := validator.NewValidator(8, 32, 1)
 | 
				
			||||||
 | 
							err := json.NewDecoder(res.Body).Decode(users)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								r.logger.Error(err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							user, err := r.db.User().FindByLogin(users.Login)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								r.logger.Error(err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if user.Login != "" {
 | 
				
			||||||
 | 
								io.WriteString(w, `{"data":"Такой Логин уже занят попробуйте придумать другой"}`)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							user, err = r.db.User().FindByEmail(users.Email)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								r.logger.Error(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if user.Email != "" {
 | 
				
			||||||
 | 
								io.WriteString(w, `{"data":"Такой email уже используется другим пользователем"}`)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							_, err = valid.CheckValid(users.Password)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								io.WriteString(w, fmt.Sprintf(`{"data":"%s"}`, err))
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							next(w, res.WithContext(context.WithValue(res.Context(), ContextKeyUser, users)))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -22,12 +22,20 @@ CREATE TABLE films (
 | 
				
			|||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE users (
 | 
					CREATE TABLE users (
 | 
				
			||||||
    id INTEGER NOT NULL,
 | 
					    id SERIAL,
 | 
				
			||||||
    login VARCHAR(25)  not NULL,
 | 
					    login TEXT  not NULL,
 | 
				
			||||||
    email VARCHAR(255) NOT NULL,
 | 
					    email TEXT NOT NULL,
 | 
				
			||||||
    password VARCHAR(2500) NOT NULL,
 | 
					    password TEXT NOT NULL,
 | 
				
			||||||
    avatar_url VARCHAR(2500),
 | 
					    avatar_url TEXT,
 | 
				
			||||||
    token VARCHAR(2500) NOT NULL,
 | 
					 | 
				
			||||||
    permisionLVL INTEGER NOT NULL,
 | 
					    permisionLVL INTEGER NOT NULL,
 | 
				
			||||||
 | 
					    SaveItem INTEGER Array,
 | 
				
			||||||
 | 
					    LaterItem INTEGER Array,
 | 
				
			||||||
 | 
					    WantItem INTEGER Array,
 | 
				
			||||||
    PRIMARY KEY(id)
 | 
					    PRIMARY KEY(id)
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CREATE TABLE tokens (
 | 
				
			||||||
 | 
					    userID INTEGER NOT NULL,
 | 
				
			||||||
 | 
					    refreshToken TEXT NOT NULL
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
							
								
								
									
										0
									
								
								pkg/utils/jwt/jwtGenerate.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								pkg/utils/jwt/jwtGenerate.go
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										11
									
								
								pkg/utils/password/password.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								pkg/utils/password/password.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					package password
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "golang.org/x/crypto/bcrypt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func HashPassword(password string) (*[]byte, error) {
 | 
				
			||||||
 | 
						bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &bytes, err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1
									
								
								pkg/utils/validator/login.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								pkg/utils/validator/login.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					package validator
 | 
				
			||||||
							
								
								
									
										56
									
								
								pkg/utils/validator/password.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								pkg/utils/validator/password.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					package validator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
						"unicode"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type password struct {
 | 
				
			||||||
 | 
						minlength int
 | 
				
			||||||
 | 
						maxlength int
 | 
				
			||||||
 | 
						upSymbol  int
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewValidator(min int, max int, up int) *password {
 | 
				
			||||||
 | 
						return &password{
 | 
				
			||||||
 | 
							minlength: min,
 | 
				
			||||||
 | 
							maxlength: max,
 | 
				
			||||||
 | 
							upSymbol:  up,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (p *password) CheckValid(password string) (bool, error) {
 | 
				
			||||||
 | 
						var Upper int
 | 
				
			||||||
 | 
						if len(password) < p.minlength {
 | 
				
			||||||
 | 
							return false, p.errorMinSymbol()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if len(password) > p.maxlength {
 | 
				
			||||||
 | 
							return false, p.errorMaxSymbol()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for _, char := range password {
 | 
				
			||||||
 | 
							if unicode.IsUpper(char) {
 | 
				
			||||||
 | 
								Upper++
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if Upper < p.upSymbol {
 | 
				
			||||||
 | 
							return false, p.errorUpperSymbol()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (p *password) errorMinSymbol() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return errors.New("Слижком короткий пароль, минимальное количество  : " + strconv.Itoa(p.minlength))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (p *password) errorMaxSymbol() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return errors.New("Превышен допустимый лимит символов, максимальное количество : " + strconv.Itoa(p.maxlength))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (p *password) errorUpperSymbol() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return errors.New("В пароле должны быть символ верхнего регистра, количество : " + strconv.Itoa(p.upSymbol))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user