/
pass_service.go
66 lines (53 loc) · 1.66 KB
/
pass_service.go
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
package data
import (
"github.com/satori/go.uuid"
"github.com/cleverua/tuna-timer-api/models"
"github.com/cleverua/tuna-timer-api/utils"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"time"
)
type PassService struct {
repository *PassRepository
}
func NewPassService(session *mgo.Session) *PassService {
return &PassService{
repository: NewPassRepository(session),
}
}
func (s *PassService) EnsurePass(team *models.Team, user *models.TeamUser, project *models.Project) (*models.Pass, error) {
pass, _ := s.repository.FindActiveByUserID(user.ID.Hex())
if pass == nil {
return s.createPass(team, user, project.ID.Hex())
}
pass.ExpiresAt = time.Now().Add(utils.PassExpiresInMinutes * time.Minute)
err := s.repository.update(pass)
return pass, err
}
func (s *PassService) FindPassByToken(token string) (*models.Pass, error) {
pass, err := s.repository.FindActivePassByToken(token)
return pass, err
}
func (s *PassService) RemoveStalePasses() error {
err := s.repository.removeExpiredPasses()
if err != nil {
return err
}
return s.repository.removePassesClaimedBefore(time.Now().Add(
-utils.ClaimedPassesToPurgeAfterDays * 24 * 60 * time.Minute))
}
func (s *PassService) createPass(team *models.Team, user *models.TeamUser, projectID string) (*models.Pass, error) {
now := time.Now()
pass := &models.Pass{
ID: bson.NewObjectId(),
Token: uuid.NewV4().String(),
ProjectID: projectID,
TeamID: team.ID.Hex(),
TeamUserID: user.ID.Hex(),
CreatedAt: now,
ExpiresAt: now.Add(utils.PassExpiresInMinutes * time.Minute),
ClaimedAt: nil,
ModelVersion: models.ModelVersionPass,
}
return pass, s.repository.Insert(pass)
}