// Copyright 2023 The casbin Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package controllers import ( "fmt" "strings" "github.com/astaxie/beego/context" "github.com/casbin/casibase/util" "github.com/casdoor/casdoor-go-sdk/casdoorsdk" ) func NewRecord(ctx *context.Context) *casdoorsdk.Record { ip := strings.Replace(util.GetIPFromRequest(ctx.Request), ": ", "", -1) action := strings.Replace(ctx.Request.URL.Path, "/api/", "", -1) requestUri := util.FilterQuery(ctx.Request.RequestURI, []string{"accessToken"}) if len(requestUri) > 1000 { requestUri = requestUri[0:1000] } record := casdoorsdk.Record{ Name: util.GenerateId(), CreatedTime: util.GetCurrentTime(), ClientIp: ip, User: "", Method: ctx.Request.Method, RequestUri: requestUri, Action: action, IsTriggered: false, } return &record } func addRecord(c *ApiController, userName string, requestUri string) { record := NewRecord(c.Ctx) record.User = userName if requestUri != "" { record.RequestUri = requestUri } util.SafeGoroutine(func() { _, err := casdoorsdk.AddRecord(record) if err != nil { panic(err) } }) } func addRecordForFile(c *ApiController, userName string, action string, storeId string, key string, filename string, isLeaf bool) { typ := "Folder" if isLeaf { typ = "File" } _, storeName := util.GetOwnerAndNameFromId(storeId) path := fmt.Sprintf("/%s/%s", key, filename) if filename == "" { path = key } text := fmt.Sprintf("%s%s, Store: %s, Path: %s", action, typ, storeName, path) addRecord(c, userName, text) }