mirror of
https://github.com/openziti/zrok.git
synced 2025-02-16 18:20:51 +01:00
reset token updates
This commit is contained in:
parent
bba9377b9f
commit
6a29ac0117
@ -37,6 +37,35 @@ func (handler *resetTokenHandler) Handle(params account.ResetTokenParams) middle
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Need to create new token and invalidate all other resources
|
// Need to create new token and invalidate all other resources
|
||||||
|
token, err := createToken()
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("error creating token for request '%v': %v", params.Body.EmailAddress, err)
|
||||||
|
return account.NewResetTokenInternalServerError()
|
||||||
|
}
|
||||||
|
|
||||||
|
a.Token = token
|
||||||
|
|
||||||
|
if _, err := str.UpdateAccount(a, tx); err != nil {
|
||||||
|
logrus.Errorf("error updating account for request '%v': %v", params.Body.EmailAddress, err)
|
||||||
|
return account.NewResetTokenInternalServerError()
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := str.DeletePasswordResetRequestByAccountId(a.Id, tx); err != nil {
|
||||||
|
logrus.Errorf("error deleting password reset requests for request '%v', but continuing on: %v", params.Body.EmailAddress, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
environmentIds, err := str.DeleteEnvironmentByAccountID(a.Id, tx)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("error deleting environments for request '%v', but continuing on: %v", params.Body.EmailAddress, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := str.DeleteFrontendsByEnvironmentIds(tx, environmentIds...); err != nil {
|
||||||
|
logrus.Errorf("error deleting frontends for request '%v', but continuing on: %v", params.Body.EmailAddress, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := str.DeleteSharesByEnvironmentIds(tx, environmentIds...); err != nil {
|
||||||
|
logrus.Errorf("error deleting shares for request '%v', but continuing on: %v", params.Body.EmailAddress, err)
|
||||||
|
}
|
||||||
|
|
||||||
if err := tx.Commit(); err != nil {
|
if err := tx.Commit(); err != nil {
|
||||||
logrus.Errorf("error committing '%v' (%v): %v", params.Body.EmailAddress, a.Email, err)
|
logrus.Errorf("error committing '%v' (%v): %v", params.Body.EmailAddress, a.Email, err)
|
||||||
@ -45,5 +74,5 @@ func (handler *resetTokenHandler) Handle(params account.ResetTokenParams) middle
|
|||||||
|
|
||||||
logrus.Infof("reset token for '%v'", a.Email)
|
logrus.Infof("reset token for '%v'", a.Email)
|
||||||
|
|
||||||
return account.NewResetTokenOK()
|
return account.NewResetTokenOK().WithPayload(&account.ResetTokenOKBody{Token: token})
|
||||||
}
|
}
|
||||||
|
@ -82,3 +82,23 @@ func (str *Store) DeleteEnvironment(id int, tx *sqlx.Tx) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (str *Store) DeleteEnvironmentByAccountID(accountId int, tx *sqlx.Tx) ([]int, error) {
|
||||||
|
stmt, err := tx.Prepare("update environments set updated_at = current_timestamp, deleted = true where account_id = $1 returning id")
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "error preparing environments delete by account_id statement")
|
||||||
|
}
|
||||||
|
rows, err := stmt.Query(accountId)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "error executing environments delete by account_id statement")
|
||||||
|
}
|
||||||
|
var is []int
|
||||||
|
for rows.Next() {
|
||||||
|
var i int
|
||||||
|
if err := rows.Scan(&i); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "error scanning environment id")
|
||||||
|
}
|
||||||
|
is = append(is, i)
|
||||||
|
}
|
||||||
|
return is, nil
|
||||||
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/jmoiron/sqlx"
|
"github.com/jmoiron/sqlx"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Frontend struct {
|
type Frontend struct {
|
||||||
@ -146,3 +148,21 @@ func (str *Store) DeleteFrontend(id int, tx *sqlx.Tx) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (str *Store) DeleteFrontendsByEnvironmentIds(tx *sqlx.Tx, environmentIds ...int) error {
|
||||||
|
queryStrs := make([]string, 0, len(environmentIds))
|
||||||
|
queryVals := make([]interface{}, 0, len(environmentIds))
|
||||||
|
for i, v := range environmentIds {
|
||||||
|
queryStrs = append(queryStrs, fmt.Sprintf("$%d", i))
|
||||||
|
queryVals = append(queryVals, v)
|
||||||
|
}
|
||||||
|
stmt, err := tx.Prepare(fmt.Sprintf("update frontends set updated_at = current_timestamp, deleted = true where environment_id in (%s)", strings.Join(queryStrs, ",")))
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "error preparing frontends delete by environment_id statement")
|
||||||
|
}
|
||||||
|
_, err = stmt.Exec(queryVals...)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "error executing frontends delete by environment_id statement")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -98,3 +98,15 @@ func (str *Store) DeleteMultiplePasswordResetRequests(ids []int, tx *sqlx.Tx) er
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (str *Store) DeletePasswordResetRequestByAccountId(accountId int, tx *sqlx.Tx) error {
|
||||||
|
stmt, err := tx.Prepare("update password_reset_requests set updated_at = current_timestamp, deleted = true where account_id = $1")
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "error preparing password_reset_requests by account_id delete statement")
|
||||||
|
}
|
||||||
|
_, err = stmt.Exec(accountId)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "error executing password_reset_requests by account_id delete statement")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/jmoiron/sqlx"
|
"github.com/jmoiron/sqlx"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Share struct {
|
type Share struct {
|
||||||
@ -111,3 +113,21 @@ func (str *Store) DeleteShare(id int, tx *sqlx.Tx) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (str *Store) DeleteSharesByEnvironmentIds(tx *sqlx.Tx, environmentIds ...int) error {
|
||||||
|
queryStrs := make([]string, 0, len(environmentIds))
|
||||||
|
queryVals := make([]interface{}, 0, len(environmentIds))
|
||||||
|
for i, v := range environmentIds {
|
||||||
|
queryStrs = append(queryStrs, fmt.Sprintf("$%d", i))
|
||||||
|
queryVals = append(queryVals, v)
|
||||||
|
}
|
||||||
|
stmt, err := tx.Prepare(fmt.Sprintf("update shares set updated_at = current_timestamp, deleted = true where environment_id in (%s)", strings.Join(queryStrs, ",")))
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "error preparing Shares delete by environment_id statement")
|
||||||
|
}
|
||||||
|
_, err = stmt.Exec(queryVals...)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "error executing Shares delete by environment_id statement")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -9,12 +9,21 @@ const App = () => {
|
|||||||
const [user, setUser] = useState();
|
const [user, setUser] = useState();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const localUser = localStorage.getItem("user");
|
function checkUserData() {
|
||||||
if(localUser) {
|
const localUser = localStorage.getItem("user");
|
||||||
setUser(JSON.parse(localUser));
|
if(localUser) {
|
||||||
console.log("reloaded user", localUser);
|
console.log(localUser)
|
||||||
|
setUser(JSON.parse(localUser));
|
||||||
|
console.log("reloaded user", localUser);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, []);
|
|
||||||
|
document.addEventListener('storage', checkUserData)
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
document.removeEventListener('storage', checkUserData)
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
const logout = () => {
|
const logout = () => {
|
||||||
setUser(null);
|
setUser(null);
|
||||||
|
@ -8,18 +8,30 @@ const ResetToken = (props) => {
|
|||||||
console.log("I should reset my token")
|
console.log("I should reset my token")
|
||||||
account.resetToken({ body: { "emailAddress": props.user.email } }).then(resp => {
|
account.resetToken({ body: { "emailAddress": props.user.email } }).then(resp => {
|
||||||
console.log(resp)
|
console.log(resp)
|
||||||
|
let user = JSON.parse(localStorage.getItem('user'))
|
||||||
|
localStorage.setItem('user', JSON.stringify({
|
||||||
|
"email": user.email,
|
||||||
|
"token": resp.data.token
|
||||||
|
}));
|
||||||
|
document.dispatchEvent(new Event('storage'))
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
console.log("err", err);
|
console.log("err", err);
|
||||||
});
|
});
|
||||||
|
props.onHide();
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Modal show={props.show} onHide={props.onHide} centered>
|
<Modal show={props.show} onHide={props.onHide} centered>
|
||||||
<Modal.Header closeButton>Are you Sure?</Modal.Header>
|
<Modal.Header closeButton>WARNING - Are you Sure?</Modal.Header>
|
||||||
<Modal.Body>
|
<Modal.Body>
|
||||||
TEST
|
<div>
|
||||||
<Button variant={"light"} onClick={resetToken}>Reset Password</Button>
|
Reseting your token will remove all environments, frontends, and shares you've created.
|
||||||
|
</div>
|
||||||
|
<div style={{display: 'flex', alignItems:'center', justifyContent: 'center'}}>
|
||||||
|
<Button variant={"light"} onClick={resetToken}>Reset Password</Button>
|
||||||
|
<Button variant={"dark"} onClick={props.onHide}>Cancel</Button>
|
||||||
|
</div>
|
||||||
</Modal.Body>
|
</Modal.Body>
|
||||||
</Modal>
|
</Modal>
|
||||||
</div>
|
</div>
|
||||||
|
@ -40,6 +40,7 @@ const Login = (props) => {
|
|||||||
localStorage.setItem('user', JSON.stringify(user))
|
localStorage.setItem('user', JSON.stringify(user))
|
||||||
console.log(user)
|
console.log(user)
|
||||||
console.log('login succeeded', resp)
|
console.log('login succeeded', resp)
|
||||||
|
document.dispatchEvent(new Event('storage'))
|
||||||
} else {
|
} else {
|
||||||
console.log('login failed')
|
console.log('login failed')
|
||||||
setMessage(errorMessage);
|
setMessage(errorMessage);
|
||||||
|
Loading…
Reference in New Issue
Block a user