Dragonfly2
99 строк · 3.2 Кб
1/*
2* Copyright 2023 The Dragonfly Authors
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8* http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*/
16
17package service18
19import (20"context"21"encoding/base64"22
23"github.com/google/uuid"24
25"d7y.io/dragonfly/v2/manager/models"26"d7y.io/dragonfly/v2/manager/types"27)
28
29func (s *service) CreatePersonalAccessToken(ctx context.Context, json types.CreatePersonalAccessTokenRequest) (*models.PersonalAccessToken, error) {30personalAccessToken := models.PersonalAccessToken{31Name: json.Name,32BIO: json.BIO,33Token: s.generatePersonalAccessToken(),34Scopes: json.Scopes,35State: models.PersonalAccessTokenStateActive,36ExpiredAt: json.ExpiredAt,37UserID: json.UserID,38}39
40if err := s.db.WithContext(ctx).Create(&personalAccessToken).Error; err != nil {41return nil, err42}43
44return &personalAccessToken, nil45}
46
47func (s *service) DestroyPersonalAccessToken(ctx context.Context, id uint) error {48personalAccessToken := models.PersonalAccessToken{}49if err := s.db.WithContext(ctx).First(&personalAccessToken, id).Error; err != nil {50return err51}52
53if err := s.db.WithContext(ctx).Unscoped().Delete(&models.PersonalAccessToken{}, id).Error; err != nil {54return err55}56
57return nil58}
59
60func (s *service) UpdatePersonalAccessToken(ctx context.Context, id uint, json types.UpdatePersonalAccessTokenRequest) (*models.PersonalAccessToken, error) {61personalAccessToken := models.PersonalAccessToken{}62if err := s.db.WithContext(ctx).Preload("User").First(&personalAccessToken, id).Updates(models.PersonalAccessToken{63BIO: json.BIO,64Scopes: json.Scopes,65State: json.State,66ExpiredAt: json.ExpiredAt,67UserID: json.UserID,68}).Error; err != nil {69return nil, err70}71
72return &personalAccessToken, nil73}
74
75func (s *service) GetPersonalAccessToken(ctx context.Context, id uint) (*models.PersonalAccessToken, error) {76personalAccessToken := models.PersonalAccessToken{}77if err := s.db.WithContext(ctx).Preload("User").First(&personalAccessToken, id).Error; err != nil {78return nil, err79}80
81return &personalAccessToken, nil82}
83
84func (s *service) GetPersonalAccessTokens(ctx context.Context, q types.GetPersonalAccessTokensQuery) ([]models.PersonalAccessToken, int64, error) {85var count int6486personalAccessToken := []models.PersonalAccessToken{}87if err := s.db.WithContext(ctx).Scopes(models.Paginate(q.Page, q.PerPage)).Where(&models.PersonalAccessToken{88State: q.State,89UserID: q.UserID,90}).Preload("User").Find(&personalAccessToken).Limit(-1).Offset(-1).Count(&count).Error; err != nil {91return nil, 0, err92}93
94return personalAccessToken, count, nil95}
96
97func (s *service) generatePersonalAccessToken() string {98return base64.RawURLEncoding.EncodeToString([]byte(uuid.NewString()))99}
100