mirror of
https://github.com/openziti/zrok.git
synced 2024-11-24 17:13:51 +01:00
limitless flag on accounts (#96)
This commit is contained in:
parent
e6932d67f2
commit
4e4bd1c876
@ -100,7 +100,7 @@ func (h *enableHandler) Handle(params environment.EnableParams, principal *rest_
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (h *enableHandler) checkLimits(principal *rest_model_zrok.Principal, tx *sqlx.Tx) error {
|
func (h *enableHandler) checkLimits(principal *rest_model_zrok.Principal, tx *sqlx.Tx) error {
|
||||||
if h.cfg.Environments > Unlimited {
|
if !principal.Limitless && h.cfg.Environments > Unlimited {
|
||||||
envs, err := str.FindEnvironmentsForAccount(int(principal.ID), tx)
|
envs, err := str.FindEnvironmentsForAccount(int(principal.ID), tx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Errorf("unable to find environments for account '%v': %v", principal.Email, err)
|
return errors.Errorf("unable to find environments for account '%v': %v", principal.Email, err)
|
||||||
|
@ -143,7 +143,7 @@ func (h *shareHandler) Handle(params share.ShareParams, principal *rest_model_zr
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (h *shareHandler) checkLimits(principal *rest_model_zrok.Principal, envs []*store.Environment, tx *sqlx.Tx) error {
|
func (h *shareHandler) checkLimits(principal *rest_model_zrok.Principal, envs []*store.Environment, tx *sqlx.Tx) error {
|
||||||
if h.cfg.Shares > Unlimited {
|
if !principal.Limitless && h.cfg.Shares > Unlimited {
|
||||||
total := 0
|
total := 0
|
||||||
for i := range envs {
|
for i := range envs {
|
||||||
shrs, err := str.FindSharesForEnvironment(envs[i].Id, tx)
|
shrs, err := str.FindSharesForEnvironment(envs[i].Id, tx)
|
||||||
|
@ -7,18 +7,19 @@ import (
|
|||||||
|
|
||||||
type Account struct {
|
type Account struct {
|
||||||
Model
|
Model
|
||||||
Email string
|
Email string
|
||||||
Password string
|
Password string
|
||||||
Token string
|
Token string
|
||||||
|
Limitless bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *Store) CreateAccount(a *Account, tx *sqlx.Tx) (int, error) {
|
func (self *Store) CreateAccount(a *Account, tx *sqlx.Tx) (int, error) {
|
||||||
stmt, err := tx.Prepare("insert into accounts (email, password, token) values ($1, $2, $3) returning id")
|
stmt, err := tx.Prepare("insert into accounts (email, password, token, limitless) values ($1, $2, $3, $4) returning id")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, errors.Wrap(err, "error preparing accounts insert statement")
|
return 0, errors.Wrap(err, "error preparing accounts insert statement")
|
||||||
}
|
}
|
||||||
var id int
|
var id int
|
||||||
if err := stmt.QueryRow(a.Email, a.Password, a.Token).Scan(&id); err != nil {
|
if err := stmt.QueryRow(a.Email, a.Password, a.Token, a.Limitless).Scan(&id); err != nil {
|
||||||
return 0, errors.Wrap(err, "error executing accounts insert statement")
|
return 0, errors.Wrap(err, "error executing accounts insert statement")
|
||||||
}
|
}
|
||||||
return id, nil
|
return id, nil
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
-- +migrate Up
|
||||||
|
|
||||||
|
alter table accounts rename to accounts_old;
|
||||||
|
|
||||||
|
create table accounts (
|
||||||
|
id serial primary key,
|
||||||
|
email varchar(1024) not null unique,
|
||||||
|
password char(128) not null,
|
||||||
|
token varchar(32) not null unique,
|
||||||
|
limitless boolean not null default(false),
|
||||||
|
created_at timestamp not null default(current_timestamp),
|
||||||
|
updated_at timestamp not null default(current_timestamp),
|
||||||
|
|
||||||
|
constraint chk_email check (email <> ''),
|
||||||
|
constraint chk_password check (password <> ''),
|
||||||
|
constraint chk_token check(token <> '')
|
||||||
|
);
|
||||||
|
|
||||||
|
insert into accounts(id, email, password, token, created_at, updated_at)
|
||||||
|
select id, email, password, token, created_at, updated_at from accounts_old;
|
||||||
|
|
||||||
|
alter table environments drop constraint fk_accounts_id;
|
||||||
|
alter table environments add constraint fk_accounts_id foreign key (account_id) references accounts(id);
|
||||||
|
|
||||||
|
drop table accounts_old;
|
@ -0,0 +1,22 @@
|
|||||||
|
-- +migrate Up
|
||||||
|
|
||||||
|
alter table accounts rename to accounts_old;
|
||||||
|
|
||||||
|
create table accounts (
|
||||||
|
id integer primary key,
|
||||||
|
email string not null unique,
|
||||||
|
password string not null,
|
||||||
|
token string not null unique,
|
||||||
|
limitless boolean not null default(false),
|
||||||
|
created_at datetime not null default(strftime('%Y-%m-%d %H:%M:%f', 'now')),
|
||||||
|
updated_at datetime not null default(strftime('%Y-%m-%d %H:%M:%f', 'now')),
|
||||||
|
|
||||||
|
constraint chk_email check (email <> ''),
|
||||||
|
constraint chk_password check (password <> ''),
|
||||||
|
constraint chk_token check(token <> '')
|
||||||
|
);
|
||||||
|
|
||||||
|
insert into accounts (id, email, password, token, created_at, updated_at)
|
||||||
|
select id, email, password, token, created_at, updated_at from accounts_old;
|
||||||
|
|
||||||
|
drop table accounts_old;
|
@ -30,9 +30,10 @@ func (za *zrokAuthenticator) authenticate(token string) (*rest_model_zrok.Princi
|
|||||||
|
|
||||||
if a, err := str.FindAccountWithToken(token, tx); err == nil {
|
if a, err := str.FindAccountWithToken(token, tx); err == nil {
|
||||||
principal := &rest_model_zrok.Principal{
|
principal := &rest_model_zrok.Principal{
|
||||||
ID: int64(a.Id),
|
ID: int64(a.Id),
|
||||||
Token: a.Token,
|
Token: a.Token,
|
||||||
Email: a.Email,
|
Email: a.Email,
|
||||||
|
Limitless: a.Limitless,
|
||||||
}
|
}
|
||||||
return principal, nil
|
return principal, nil
|
||||||
} else {
|
} else {
|
||||||
|
@ -26,6 +26,9 @@ type Principal struct {
|
|||||||
// id
|
// id
|
||||||
ID int64 `json:"id,omitempty"`
|
ID int64 `json:"id,omitempty"`
|
||||||
|
|
||||||
|
// limitless
|
||||||
|
Limitless bool `json:"limitless,omitempty"`
|
||||||
|
|
||||||
// token
|
// token
|
||||||
Token string `json:"token,omitempty"`
|
Token string `json:"token,omitempty"`
|
||||||
}
|
}
|
||||||
|
@ -943,6 +943,9 @@ func init() {
|
|||||||
"id": {
|
"id": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"limitless": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
@ -2111,6 +2114,9 @@ func init() {
|
|||||||
"id": {
|
"id": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
|
"limitless": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
|
@ -610,6 +610,8 @@ definitions:
|
|||||||
type: string
|
type: string
|
||||||
token:
|
token:
|
||||||
type: string
|
type: string
|
||||||
|
limitless:
|
||||||
|
type: boolean
|
||||||
admin:
|
admin:
|
||||||
type: boolean
|
type: boolean
|
||||||
|
|
||||||
|
@ -121,6 +121,7 @@
|
|||||||
* @property {number} id
|
* @property {number} id
|
||||||
* @property {string} email
|
* @property {string} email
|
||||||
* @property {string} token
|
* @property {string} token
|
||||||
|
* @property {boolean} limitless
|
||||||
* @property {boolean} admin
|
* @property {boolean} admin
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user