github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/app/compliance.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package app 5 6 import ( 7 "errors" 8 "io/ioutil" 9 "net/http" 10 11 "github.com/mattermost/mattermost-server/v5/model" 12 "github.com/mattermost/mattermost-server/v5/store" 13 ) 14 15 func (a *App) GetComplianceReports(page, perPage int) (model.Compliances, *model.AppError) { 16 if license := a.Srv().License(); !*a.Config().ComplianceSettings.Enable || license == nil || !*license.Features.Compliance { 17 return nil, model.NewAppError("GetComplianceReports", "ent.compliance.licence_disable.app_error", nil, "", http.StatusNotImplemented) 18 } 19 20 compliances, err := a.Srv().Store.Compliance().GetAll(page*perPage, perPage) 21 if err != nil { 22 return nil, model.NewAppError("GetComplianceReports", "app.compliance.get.finding.app_error", nil, err.Error(), http.StatusInternalServerError) 23 } 24 25 return compliances, nil 26 } 27 28 func (a *App) SaveComplianceReport(job *model.Compliance) (*model.Compliance, *model.AppError) { 29 if license := a.Srv().License(); !*a.Config().ComplianceSettings.Enable || license == nil || !*license.Features.Compliance || a.Compliance() == nil { 30 return nil, model.NewAppError("saveComplianceReport", "ent.compliance.licence_disable.app_error", nil, "", http.StatusNotImplemented) 31 } 32 33 job.Type = model.COMPLIANCE_TYPE_ADHOC 34 35 job, err := a.Srv().Store.Compliance().Save(job) 36 if err != nil { 37 var appErr *model.AppError 38 switch { 39 case errors.As(err, &appErr): 40 return nil, appErr 41 default: 42 return nil, model.NewAppError("SaveComplianceReport", "app.compliance.save.saving.app_error", nil, err.Error(), http.StatusInternalServerError) 43 } 44 } 45 46 a.Srv().Go(func() { 47 a.Compliance().RunComplianceJob(job) 48 }) 49 50 return job, nil 51 } 52 53 func (a *App) GetComplianceReport(reportId string) (*model.Compliance, *model.AppError) { 54 if license := a.Srv().License(); !*a.Config().ComplianceSettings.Enable || license == nil || !*license.Features.Compliance || a.Compliance() == nil { 55 return nil, model.NewAppError("downloadComplianceReport", "ent.compliance.licence_disable.app_error", nil, "", http.StatusNotImplemented) 56 } 57 58 compliance, err := a.Srv().Store.Compliance().Get(reportId) 59 if err != nil { 60 var nfErr *store.ErrNotFound 61 switch { 62 case errors.As(err, &nfErr): 63 return nil, model.NewAppError("GetComplicanceReport", "app.compliance.get.finding.app_error", nil, nfErr.Error(), http.StatusNotFound) 64 default: 65 return nil, model.NewAppError("GetComplianceReport", "app.compliance.get.finding.app_error", nil, err.Error(), http.StatusInternalServerError) 66 } 67 } 68 69 return compliance, nil 70 } 71 72 func (a *App) GetComplianceFile(job *model.Compliance) ([]byte, *model.AppError) { 73 f, err := ioutil.ReadFile(*a.Config().ComplianceSettings.Directory + "compliance/" + job.JobName() + ".zip") 74 if err != nil { 75 return nil, model.NewAppError("readFile", "api.file.read_file.reading_local.app_error", nil, err.Error(), http.StatusNotImplemented) 76 } 77 return f, nil 78 }