ghttp_server_domain.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. // Copyright 2017 gf Author(https://github.com/gogf/gf). All Rights Reserved.
  2. //
  3. // This Source Code Form is subject to the terms of the MIT License.
  4. // If a copy of the MIT was not distributed with this file,
  5. // You can obtain one at https://github.com/gogf/gf.
  6. package ghttp
  7. import (
  8. "strings"
  9. )
  10. // Domain is used for route register for domains.
  11. type Domain struct {
  12. server *Server // Belonged server
  13. domains map[string]struct{} // Support multiple domains.
  14. }
  15. // Domain creates and returns a domain object for management for one or more domains.
  16. func (s *Server) Domain(domains string) *Domain {
  17. d := &Domain{
  18. server: s,
  19. domains: make(map[string]struct{}),
  20. }
  21. for _, v := range strings.Split(domains, ",") {
  22. d.domains[strings.TrimSpace(v)] = struct{}{}
  23. }
  24. return d
  25. }
  26. func (d *Domain) BindHandler(pattern string, handler HandlerFunc) {
  27. for domain, _ := range d.domains {
  28. d.server.BindHandler(pattern+"@"+domain, handler)
  29. }
  30. }
  31. func (d *Domain) doBindHandler(
  32. pattern string, handler HandlerFunc,
  33. middleware []HandlerFunc, source string,
  34. ) {
  35. for domain, _ := range d.domains {
  36. d.server.doBindHandler(pattern+"@"+domain, handler, middleware, source)
  37. }
  38. }
  39. func (d *Domain) BindObject(pattern string, obj interface{}, methods ...string) {
  40. for domain, _ := range d.domains {
  41. d.server.BindObject(pattern+"@"+domain, obj, methods...)
  42. }
  43. }
  44. func (d *Domain) doBindObject(
  45. pattern string, obj interface{}, methods string,
  46. middleware []HandlerFunc, source string,
  47. ) {
  48. for domain, _ := range d.domains {
  49. d.server.doBindObject(pattern+"@"+domain, obj, methods, middleware, source)
  50. }
  51. }
  52. func (d *Domain) BindObjectMethod(pattern string, obj interface{}, method string) {
  53. for domain, _ := range d.domains {
  54. d.server.BindObjectMethod(pattern+"@"+domain, obj, method)
  55. }
  56. }
  57. func (d *Domain) doBindObjectMethod(
  58. pattern string, obj interface{}, method string,
  59. middleware []HandlerFunc, source string,
  60. ) {
  61. for domain, _ := range d.domains {
  62. d.server.doBindObjectMethod(pattern+"@"+domain, obj, method, middleware, source)
  63. }
  64. }
  65. func (d *Domain) BindObjectRest(pattern string, obj interface{}) {
  66. for domain, _ := range d.domains {
  67. d.server.BindObjectRest(pattern+"@"+domain, obj)
  68. }
  69. }
  70. func (d *Domain) doBindObjectRest(
  71. pattern string, obj interface{},
  72. middleware []HandlerFunc, source string,
  73. ) {
  74. for domain, _ := range d.domains {
  75. d.server.doBindObjectRest(pattern+"@"+domain, obj, middleware, source)
  76. }
  77. }
  78. func (d *Domain) BindController(pattern string, c Controller, methods ...string) {
  79. for domain, _ := range d.domains {
  80. d.server.BindController(pattern+"@"+domain, c, methods...)
  81. }
  82. }
  83. func (d *Domain) doBindController(
  84. pattern string, c Controller, methods string,
  85. middleware []HandlerFunc, source string,
  86. ) {
  87. for domain, _ := range d.domains {
  88. d.server.doBindController(pattern+"@"+domain, c, methods, middleware, source)
  89. }
  90. }
  91. func (d *Domain) BindControllerMethod(pattern string, c Controller, method string) {
  92. for domain, _ := range d.domains {
  93. d.server.BindControllerMethod(pattern+"@"+domain, c, method)
  94. }
  95. }
  96. func (d *Domain) doBindControllerMethod(
  97. pattern string, c Controller, method string,
  98. middleware []HandlerFunc, source string,
  99. ) {
  100. for domain, _ := range d.domains {
  101. d.server.doBindControllerMethod(pattern+"@"+domain, c, method, middleware, source)
  102. }
  103. }
  104. func (d *Domain) BindControllerRest(pattern string, c Controller) {
  105. for domain, _ := range d.domains {
  106. d.server.BindControllerRest(pattern+"@"+domain, c)
  107. }
  108. }
  109. func (d *Domain) doBindControllerRest(
  110. pattern string, c Controller,
  111. middleware []HandlerFunc, source string,
  112. ) {
  113. for domain, _ := range d.domains {
  114. d.server.doBindControllerRest(pattern+"@"+domain, c, middleware, source)
  115. }
  116. }
  117. func (d *Domain) BindHookHandler(pattern string, hook string, handler HandlerFunc) {
  118. for domain, _ := range d.domains {
  119. d.server.BindHookHandler(pattern+"@"+domain, hook, handler)
  120. }
  121. }
  122. func (d *Domain) doBindHookHandler(pattern string, hook string, handler HandlerFunc, source string) {
  123. for domain, _ := range d.domains {
  124. d.server.doBindHookHandler(pattern+"@"+domain, hook, handler, source)
  125. }
  126. }
  127. func (d *Domain) BindHookHandlerByMap(pattern string, hookmap map[string]HandlerFunc) {
  128. for domain, _ := range d.domains {
  129. d.server.BindHookHandlerByMap(pattern+"@"+domain, hookmap)
  130. }
  131. }
  132. func (d *Domain) BindStatusHandler(status int, handler HandlerFunc) {
  133. for domain, _ := range d.domains {
  134. d.server.addStatusHandler(d.server.statusHandlerKey(status, domain), handler)
  135. }
  136. }
  137. func (d *Domain) BindStatusHandlerByMap(handlerMap map[int]HandlerFunc) {
  138. for k, v := range handlerMap {
  139. d.BindStatusHandler(k, v)
  140. }
  141. }
  142. func (d *Domain) BindMiddleware(pattern string, handlers ...HandlerFunc) {
  143. for domain, _ := range d.domains {
  144. d.server.BindMiddleware(pattern+"@"+domain, handlers...)
  145. }
  146. }
  147. func (d *Domain) BindMiddlewareDefault(handlers ...HandlerFunc) {
  148. for domain, _ := range d.domains {
  149. d.server.BindMiddleware(gDEFAULT_MIDDLEWARE_PATTERN+"@"+domain, handlers...)
  150. }
  151. }
  152. func (d *Domain) Use(handlers ...HandlerFunc) {
  153. d.BindMiddlewareDefault(handlers...)
  154. }