LogPushCloudflareServer.go 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package server
  2. import (
  3. "cfTest/cloudflareApi/logPush"
  4. "context"
  5. "errors"
  6. "github.com/cloudflare/cloudflare-go"
  7. "log"
  8. "strings"
  9. )
  10. type LogPushCloudflareServer struct {
  11. logPush.UnimplementedLogPushCloudflareServer
  12. }
  13. func (s *LogPushCloudflareServer) ListLogPushJobsByZoneId(ctx context.Context,
  14. requestCloudflare *logPush.ListLogPushJobRequestByZoneId) (*logPush.ListLogPushJobReplay, error) {
  15. if strings.HasPrefix(requestCloudflare.GetApiKey(), TOKEN_PREFIX) {
  16. api, err = cloudflare.NewWithAPIToken(requestCloudflare.GetApiKey()[3:])
  17. } else {
  18. api, err = cloudflare.New(requestCloudflare.GetApiKey(), requestCloudflare.GetApiEmail())
  19. }
  20. if err != nil {
  21. log.Printf("new cloudflare api error : %v", err)
  22. return nil, err
  23. }
  24. ctxAPI := context.Background()
  25. zoneIdentifier := cloudflare.ZoneIdentifier(requestCloudflare.GetZoneId())
  26. listLogpushJobsForDatasetParams := cloudflare.ListLogpushJobsForDatasetParams{
  27. Dataset: requestCloudflare.DataSet,
  28. }
  29. LogPushJobs, err := api.ListLogpushJobsForDataset(ctxAPI, zoneIdentifier, listLogpushJobsForDatasetParams)
  30. //LogPushJobs, err := api.ListZoneLogpushJobsForDataset(ctxAPI,
  31. // requestCloudflare.GetZoneId(), requestCloudflare.GetDataSet())
  32. if err != nil {
  33. log.Printf("list logpush job error : %v", err)
  34. return nil, err
  35. }
  36. list := make([]*logPush.LogPushJobEntity, len(LogPushJobs))
  37. for i, job := range LogPushJobs {
  38. list[i] = Go2ProtoLogPushJob(job)
  39. }
  40. return &logPush.ListLogPushJobReplay{
  41. Result: list,
  42. }, err
  43. }
  44. func (s *LogPushCloudflareServer) CreateLogPushJobByZoneId(ctx context.Context,
  45. requestCloudflare *logPush.CreateLogPushJobRequestByZoneId) (*logPush.CreateLogPushJobReplay, error) {
  46. if strings.HasPrefix(requestCloudflare.GetApiKey(), TOKEN_PREFIX) {
  47. api, err = cloudflare.NewWithAPIToken(requestCloudflare.GetApiKey()[3:])
  48. } else {
  49. api, err = cloudflare.New(requestCloudflare.GetApiKey(), requestCloudflare.GetApiEmail())
  50. }
  51. if err != nil {
  52. log.Printf("new cloudflare api error : %v", err)
  53. return nil, err
  54. }
  55. ctxAPI := context.Background()
  56. //job := cloudflare.LogpushJob{
  57. // Dataset: requestCloudflare.GetDataSet(),
  58. // DestinationConf: requestCloudflare.GetDestinationConf(),
  59. // Enabled: true,
  60. // Frequency: "low",
  61. // LogpullOptions: "fields=ClientIP,ClientCountry,ClientRequestMethod,ClientRequestProtocol," +
  62. // "ClientRequestHost,ClientRequestPath,ClientRequestURI,ClientRequestBytes," +
  63. // "EdgeResponseStatus,EdgeResponseBytes,ClientRequestUserAgent,CacheCacheStatus,CacheResponseBytes," +
  64. // "EdgeStartTimestamp,EdgeEndTimestamp&timestamps=rfc3339",
  65. // OwnershipChallenge: requestCloudflare.GetOwnershipChallenge(),
  66. //}
  67. zoneIdentifier := cloudflare.ZoneIdentifier(requestCloudflare.GetZoneId())
  68. createLogpushJobParams := cloudflare.CreateLogpushJobParams{
  69. Dataset: requestCloudflare.GetDataSet(),
  70. DestinationConf: requestCloudflare.GetDestinationConf(),
  71. Enabled: true,
  72. Frequency: "low",
  73. LogpullOptions: "fields=ClientIP,ClientCountry,ClientRequestMethod,ClientRequestProtocol," +
  74. "ClientRequestHost,ClientRequestPath,ClientRequestURI,ClientRequestBytes," +
  75. "EdgeResponseStatus,EdgeResponseBytes,ClientRequestUserAgent,CacheCacheStatus,CacheResponseBytes," +
  76. "EdgeStartTimestamp,EdgeEndTimestamp&timestamps=rfc3339",
  77. OwnershipChallenge: requestCloudflare.GetOwnershipChallenge(),
  78. }
  79. result, err := api.CreateLogpushJob(ctxAPI, zoneIdentifier, createLogpushJobParams)
  80. //result, err := api.CreateZoneLogpushJob(ctxAPI,zoneIdentifier, job)
  81. if err != nil {
  82. log.Printf("create logpush job error : %v", err)
  83. return nil, err
  84. }
  85. return &logPush.CreateLogPushJobReplay{
  86. Result: Go2ProtoLogPushJob(*result),
  87. }, err
  88. }
  89. func (s *LogPushCloudflareServer) DeleteLogPushJobByZoneId(ctx context.Context,
  90. requestCloudflare *logPush.DeleteLogPushJobRequestByZoneId) (*logPush.DeleteLogPushJobReplay, error) {
  91. if strings.HasPrefix(requestCloudflare.GetApiKey(), TOKEN_PREFIX) {
  92. api, err = cloudflare.NewWithAPIToken(requestCloudflare.GetApiKey()[3:])
  93. } else {
  94. api, err = cloudflare.New(requestCloudflare.GetApiKey(), requestCloudflare.GetApiEmail())
  95. }
  96. if err != nil {
  97. log.Printf("new cloudflare api error : %v", err)
  98. return nil, err
  99. }
  100. ctxAPI := context.Background()
  101. zoneIdentifier := cloudflare.ZoneIdentifier(requestCloudflare.GetZoneId())
  102. result := api.DeleteLogpushJob(ctxAPI, zoneIdentifier, int(requestCloudflare.GetJobId()))
  103. //result := api.DeleteZoneLogpushJob(ctxAPI, requestCloudflare.GetZoneId(), int(requestCloudflare.GetJobId()))
  104. if result != nil {
  105. log.Printf("delete zone LogpushJob error: %v", result.Error())
  106. return &logPush.DeleteLogPushJobReplay{
  107. Success: false,
  108. Message: result.Error(),
  109. }, err
  110. }
  111. return &logPush.DeleteLogPushJobReplay{
  112. Success: true,
  113. Message: "success",
  114. }, err
  115. }
  116. func (s *LogPushCloudflareServer) GetOwnershipChallengeByZoneId(ctx context.Context,
  117. requestCloudflare *logPush.GetOwnershipChallengeRequestByZoneId) (*logPush.GetOwnershipChallengeReply, error) {
  118. if strings.HasPrefix(requestCloudflare.GetApiKey(), TOKEN_PREFIX) {
  119. api, err = cloudflare.NewWithAPIToken(requestCloudflare.GetApiKey()[3:])
  120. } else {
  121. api, err = cloudflare.New(requestCloudflare.GetApiKey(), requestCloudflare.GetApiEmail())
  122. }
  123. if err != nil {
  124. log.Printf("new cloudflare api error : %v", err)
  125. return nil, err
  126. }
  127. ctxAPI := context.Background()
  128. zoneIdentifier := cloudflare.ZoneIdentifier(requestCloudflare.GetZoneId())
  129. getLogpushOwnershipChallengeParams := cloudflare.GetLogpushOwnershipChallengeParams{
  130. DestinationConf: requestCloudflare.DestinationConf,
  131. }
  132. ownershipChallenge, err := api.GetLogpushOwnershipChallenge(ctxAPI, zoneIdentifier, getLogpushOwnershipChallengeParams)
  133. //ownershipChallenge, err := api.GetZoneLogpushOwnershipChallenge(ctxAPI,
  134. // requestCloudflare.GetZoneId(), requestCloudflare.GetDestinationConf())
  135. if err != nil {
  136. log.Printf("get logpush job ownershipChallenge error : %v", err)
  137. return nil, err
  138. }
  139. if ownershipChallenge.Valid {
  140. log.Printf("ownershipChallenge success: %v", ownershipChallenge.Filename)
  141. return &logPush.GetOwnershipChallengeReply{
  142. Result: &logPush.OwnershipChallengeEntity{
  143. Filename: ownershipChallenge.Filename,
  144. Valid: ownershipChallenge.Valid,
  145. Message: ownershipChallenge.Message,
  146. },
  147. }, err
  148. }
  149. log.Printf("ownershipChallenge fail: %v", ownershipChallenge.Message)
  150. return nil, errors.New(ownershipChallenge.Message)
  151. }
  152. func (s *LogPushCloudflareServer) CheckDestinationExist(ctx context.Context,
  153. requestCloudflare *logPush.CheckDestinationExistRequest) (*logPush.CheckDestinationExistReply, error) {
  154. if strings.HasPrefix(requestCloudflare.GetApiKey(), TOKEN_PREFIX) {
  155. api, err = cloudflare.NewWithAPIToken(requestCloudflare.GetApiKey()[3:])
  156. } else {
  157. api, err = cloudflare.New(requestCloudflare.GetApiKey(), requestCloudflare.GetApiEmail())
  158. }
  159. if err != nil {
  160. log.Printf("new cloudflare api error : %v", err)
  161. return nil, err
  162. }
  163. ctxAPI := context.Background()
  164. zoneIdentifier := cloudflare.ZoneIdentifier(requestCloudflare.GetZoneId())
  165. exists, err := api.CheckLogpushDestinationExists(ctxAPI, zoneIdentifier, requestCloudflare.GetDestinationConf())
  166. //exists, err := api.CheckZoneLogpushDestinationExists(ctxAPI, requestCloudflare.GetZoneId(), requestCloudflare.GetDestinationConf())
  167. if err != nil {
  168. log.Printf("check logpush job destination error : %v", err)
  169. return nil, err
  170. }
  171. return &logPush.CheckDestinationExistReply{
  172. Exists: exists,
  173. }, err
  174. }
  175. func (s *LogPushCloudflareServer) ValidateOwnershipChallenge(ctx context.Context,
  176. requestCloudflare *logPush.ValidateOwnershipChallengeRequest) (*logPush.ValidateOwnershipChallengeReply, error) {
  177. if strings.HasPrefix(requestCloudflare.GetApiKey(), TOKEN_PREFIX) {
  178. api, err = cloudflare.NewWithAPIToken(requestCloudflare.GetApiKey()[3:])
  179. } else {
  180. api, err = cloudflare.New(requestCloudflare.GetApiKey(), requestCloudflare.GetApiEmail())
  181. }
  182. if err != nil {
  183. log.Printf("new cloudflare api error : %v", err)
  184. return nil, err
  185. }
  186. ctxAPI := context.Background()
  187. zoneIdentifier := cloudflare.ZoneIdentifier(requestCloudflare.GetZoneId())
  188. validateLogpushOwnershipChallengeParams := cloudflare.ValidateLogpushOwnershipChallengeParams{
  189. DestinationConf: requestCloudflare.DestinationConf,
  190. OwnershipChallenge: requestCloudflare.OwnershipChallenge,
  191. }
  192. valid, err := api.ValidateLogpushOwnershipChallenge(ctxAPI, zoneIdentifier, validateLogpushOwnershipChallengeParams)
  193. //valid, err := api.ValidateZoneLogpushOwnershipChallenge(ctxAPI, requestCloudflare.GetZoneId(),
  194. // requestCloudflare.GetDestinationConf(), requestCloudflare.GetOwnershipChallenge())
  195. if err != nil {
  196. log.Printf("validate logpush job ownership challenge error : %v", err)
  197. return nil, err
  198. }
  199. return &logPush.ValidateOwnershipChallengeReply{
  200. Valid: valid,
  201. }, err
  202. }