diff options
Diffstat (limited to 'msb-core')
21 files changed, 1480 insertions, 103 deletions
diff --git a/msb-core/apiroute/apiroute-service/dependency-reduced-pom.xml b/msb-core/apiroute/apiroute-service/dependency-reduced-pom.xml deleted file mode 100644 index de1fbab..0000000 --- a/msb-core/apiroute/apiroute-service/dependency-reduced-pom.xml +++ /dev/null @@ -1,92 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <artifactId>apiroute-parent</artifactId>
- <groupId>org.openo.common-services.microservice-bus</groupId>
- <version>1.0.0-SNAPSHOT</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <artifactId>apiroute-service</artifactId>
- <name>openo/msb/msb-core/apiroute/apiroute-service</name>
- <version>1.0.0-SNAPSHOT</version>
- <build>
- <resources>
- <resource>
- <directory>src/main/java</directory>
- <includes>
- <include>**/*.properties</include>
- </includes>
- </resource>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- </resources>
- <plugins>
- <plugin>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.4</version>
- <configuration>
- <archive>
- <manifest>
- <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
- </manifest>
- </archive>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-shade-plugin</artifactId>
- <version>2.3</version>
- <executions>
- <execution>
- <phase>package</phase>
- <goals>
- <goal>shade</goal>
- </goals>
- <configuration>
- <transformers>
- <transformer />
- <transformer>
- <mainClass>org.openo.msb.ApiRouteApp</mainClass>
- </transformer>
- </transformers>
- </configuration>
- </execution>
- </executions>
- <configuration>
- <createDependencyReducedPom>true</createDependencyReducedPom>
- <filters>
- <filter>
- <artifact>*:*</artifact>
- <excludes>
- <exclude>META-INF/*.SF</exclude>
- <exclude>META-INF/*.DSA</exclude>
- <exclude>META-INF/*.RSA</exclude>
- </excludes>
- </filter>
- </filters>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <skip>true</skip>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.11</version>
- <scope>test</scope>
- <exclusions>
- <exclusion>
- <artifactId>hamcrest-core</artifactId>
- <groupId>org.hamcrest</groupId>
- </exclusion>
- </exclusions>
- </dependency>
- </dependencies>
-</project>
-
diff --git a/msb-core/apiroute/apiroute-service/pom.xml b/msb-core/apiroute/apiroute-service/pom.xml index 55d1a5e..8eb17fb 100644 --- a/msb-core/apiroute/apiroute-service/pom.xml +++ b/msb-core/apiroute/apiroute-service/pom.xml @@ -1,3 +1,4 @@ +<?xml version="1.0"?> <!-- Copyright 2016 2015-2016 ZTE, Inc. and others. All rights reserved. diff --git a/msb-core/apiroute/apiroute-standalone/pom.xml b/msb-core/apiroute/apiroute-standalone/pom.xml index fcda376..c4e1b76 100644 --- a/msb-core/apiroute/apiroute-standalone/pom.xml +++ b/msb-core/apiroute/apiroute-standalone/pom.xml @@ -126,4 +126,3 @@ </build> </project> - diff --git a/msb-core/distributions/standalone/pom.xml b/msb-core/distributions/standalone/pom.xml index cddca6b..94f1f9f 100644 --- a/msb-core/distributions/standalone/pom.xml +++ b/msb-core/distributions/standalone/pom.xml @@ -96,6 +96,13 @@ <version>${project.version}</version> <optional>true</optional> </dependency> + <dependency> + <groupId>org.openo.common-services.microservice-bus</groupId> + <artifactId>eag-openresty-ext</artifactId> + <type>zip</type> + <version>${project.version}</version> + <optional>true</optional> + </dependency> </dependencies> @@ -225,6 +232,35 @@ <outputAbsoluteArtifactFilename>true</outputAbsoluteArtifactFilename> </configuration> </execution> + + <execution> + <id>eag-unpacktolinux64</id> + <goals> + <goal>unpack</goal> + </goals> + <phase>prepare-package</phase> + <configuration> + <artifactItems> + <artifactItem> + <groupId>org.openo.common-services.microservice-bus</groupId> + <artifactId>openresty</artifactId> + <type>tar.gz</type> + <classifier>linux64</classifier> + </artifactItem> + <artifactItem> + <groupId>org.openo.common-services.microservice-bus</groupId> + <artifactId>eag-openresty-ext</artifactId> + <type>zip</type> + </artifactItem> + </artifactItems> + <excludes>**/*.bat,*.cmd</excludes> + <outputDirectory>${linux64outputdir}/eag</outputDirectory> + <overWriteReleases>false</overWriteReleases> + <overWriteSnapshots>true</overWriteSnapshots> + <outputAbsoluteArtifactFilename>true</outputAbsoluteArtifactFilename> + </configuration> + </execution> + <execution> <id>unpacktowin64</id> <goals> @@ -268,6 +304,34 @@ <outputAbsoluteArtifactFilename>true</outputAbsoluteArtifactFilename> </configuration> </execution> + + <execution> + <id>eag-unpacktowin64</id> + <goals> + <goal>unpack</goal> + </goals> + <phase>prepare-package</phase> + <configuration> + <artifactItems> + <artifactItem> + <groupId>org.openo.common-services.microservice-bus</groupId> + <artifactId>openresty</artifactId> + <type>zip</type> + <classifier>win64</classifier> + </artifactItem> + <artifactItem> + <groupId>org.openo.common-services.microservice-bus</groupId> + <artifactId>eag-openresty-ext</artifactId> + <type>zip</type> + </artifactItem> + </artifactItems> + <excludes>*.sh,*/*.sh,*/*/*.sh</excludes> + <outputDirectory>${win64outputdir}/eag</outputDirectory> + <overWriteReleases>false</overWriteReleases> + <overWriteSnapshots>true</overWriteSnapshots> + <outputAbsoluteArtifactFilename>true</outputAbsoluteArtifactFilename> + </configuration> + </execution> </executions> </plugin> @@ -275,6 +339,44 @@ <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <executions> + + <execution> + <id>prepare-eag-openresty-linux</id> + <phase>prepare-package</phase> + <goals> + <goal>run</goal> + </goals> + <configuration> + <target> + <copy todir="${linux64outputdir}/eag/"> + <fileset dir="${linux64outputdir}/eag/openresty"/> + </copy> + <delete + dir="${linux64outputdir}/eag/openresty" + includeemptydirs="true"/> + </target> + </configuration> + </execution> + + <execution> + <id>prepare-eag-openresty-win</id> + <phase>prepare-package</phase> + <goals> + <goal>run</goal> + </goals> + <configuration> + <target> + <copy todir="${win64outputdir}/eag/"> + <fileset dir="${win64outputdir}/eag/openresty"/> + </copy> + <delete + dir="${win64outputdir}/eag/openresty" + includeemptydirs="true"/> + </target> + </configuration> + </execution> + + <execution> <id>distribution</id> <phase>package</phase> @@ -287,11 +389,13 @@ <tarfileset dir="target/assembly/linux64" filemode="0644" dirmode="0755"> <exclude name="**/*.sh"/> <exclude name="openresty/nginx/sbin/nginx"/> + <include name="eag/nginx/sbin/nginx"/> <exclude name="redis/redis-*"/> </tarfileset> <tarfileset dir="target/assembly/linux64" filemode="0755" dirmode="0755"> <include name="**/*.sh"/> <include name="openresty/nginx/sbin/nginx"/> + <include name="eag/nginx/sbin/nginx"/> <include name="redis/redis-*"/> </tarfileset> </tar> @@ -311,4 +415,3 @@ </build> </project> - diff --git a/msb-core/distributions/standalone/src/assembly/resource/shutdown.bat b/msb-core/distributions/standalone/src/assembly/resource/shutdown.bat index cdc98b8..c2cce3b 100644 --- a/msb-core/distributions/standalone/src/assembly/resource/shutdown.bat +++ b/msb-core/distributions/standalone/src/assembly/resource/shutdown.bat @@ -29,6 +29,9 @@ rem For /f %%i in (%~dp0\stop.tmp) DO start %%i echo ### Stopping openresty start /D %RUNHOME%openresty stop.bat +echo ### Stopping external API gateway +start /D %RUNHOME%eag stop.bat + echo ### Stopping apiroute start /D %RUNHOME%apiroute stop.bat diff --git a/msb-core/distributions/standalone/src/assembly/resource/shutdown.sh b/msb-core/distributions/standalone/src/assembly/resource/shutdown.sh index 2bb2a84..0c19f3f 100644 --- a/msb-core/distributions/standalone/src/assembly/resource/shutdown.sh +++ b/msb-core/distributions/standalone/src/assembly/resource/shutdown.sh @@ -28,6 +28,12 @@ cd ./openresty ./stop.sh & cd $RUNHOME +echo "### Stopping external API gateway..."; +# nohup ./startup.sh >>./nohup.log 2>&1 & +cd ./eag +./stop.sh & +cd $RUNHOME + echo "\n\n### Stopping apiroute" cd ./apiroute ./stop.sh & diff --git a/msb-core/distributions/standalone/src/assembly/resource/startup.bat b/msb-core/distributions/standalone/src/assembly/resource/startup.bat index e7f8cf3..a85ace7 100644 --- a/msb-core/distributions/standalone/src/assembly/resource/startup.bat +++ b/msb-core/distributions/standalone/src/assembly/resource/startup.bat @@ -35,6 +35,9 @@ start /D %RUNHOME%apiroute run.bat run echo ### Starting openresty start /D %RUNHOME%openresty run.bat +echo ### Starting external API gateway +start /D %RUNHOME%eag run.bat + echo Startup will be finished in background... echo + Run "start .\apiroute-works\logs\application.log" to see what's happening echo + Wait a minute diff --git a/msb-core/distributions/standalone/src/assembly/resource/startup.sh b/msb-core/distributions/standalone/src/assembly/resource/startup.sh index bcc0865..e0fee7d 100644 --- a/msb-core/distributions/standalone/src/assembly/resource/startup.sh +++ b/msb-core/distributions/standalone/src/assembly/resource/startup.sh @@ -41,6 +41,11 @@ cd ./openresty ./run.sh & cd $RUNHOME +echo "### Starting external API gateway..."; +# nohup ./startup.sh >>./nohup.log 2>&1 & +cd ./eag +./run.sh & +cd $RUNHOME echo "Startup will be finished in background..."; echo " + Run 'tail ./apiroute-works/logs/application.log -f' to see what's happening"; diff --git a/msb-core/eag-openresty-ext/pom.xml b/msb-core/eag-openresty-ext/pom.xml new file mode 100644 index 0000000..16e76e7 --- /dev/null +++ b/msb-core/eag-openresty-ext/pom.xml @@ -0,0 +1,119 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + Copyright 2016 2015-2016 ZTE, Inc. and others. 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. + + Author: Zhaoxing Meng + email: meng.zhaoxing1@zte.com.cn + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <groupId>org.openo.common-services.microservice-bus</groupId> + <artifactId>msb-core-parent</artifactId> + <version>1.0.0-SNAPSHOT</version> + </parent> + + + <modelVersion>4.0.0</modelVersion> + <artifactId>eag-openresty-ext</artifactId> + <version>1.0.0-SNAPSHOT</version> + <name>openo/msb/msb-core/eag-openresty-ext</name> + <packaging>pom</packaging> + + <properties> + <outputdir>target/assembly</outputdir> + <packageid>eag-openresty-ext</packageid> + </properties> + <build> + <plugins> + <plugin> + <artifactId>maven-resources-plugin</artifactId> + <configuration> + <includeEmptyDirs>true</includeEmptyDirs> + </configuration> + <executions> + <execution> + <id>copy-resources</id> + <phase>process-resources</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <outputDirectory>${outputdir}</outputDirectory> + <resources> + <resource> + <directory>../openresty-ext/src/assembly/resources/</directory> + <filtering>false</filtering> + <includes> + <include>**/*</include> + </includes> + </resource> + </resources> + <overwrite>true</overwrite> + </configuration> + </execution> + + <execution> + <id>eag-copy-resources</id> + <phase>process-resources</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <outputDirectory>${outputdir}</outputDirectory> + <resources> + <resource> + <directory>src/assembly/resources/</directory> + <filtering>false</filtering> + <includes> + <include>**/*</include> + </includes> + </resource> + </resources> + <overwrite>true</overwrite> + </configuration> + </execution> + + </executions> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <id>distribution</id> + <phase>package</phase> + <goals> + <goal>run</goal> + </goals> + <configuration> + <target name="distribution"> + <zip destfile="target/${packageid}-${project.version}.zip" update="true"> + <zipfileset dir="target/assembly/" includes="**"/> + </zip> + <attachartifact file="target/${packageid}-${project.version}.zip" type="zip"/> + </target> + </configuration> + </execution> + </executions> + </plugin> + + </plugins> + </build> + + +</project> diff --git a/msb-core/eag-openresty-ext/src/assembly/resources/openresty/nginx/luaext/msbconf.lua b/msb-core/eag-openresty-ext/src/assembly/resources/openresty/nginx/luaext/msbconf.lua new file mode 100644 index 0000000..4e820f5 --- /dev/null +++ b/msb-core/eag-openresty-ext/src/assembly/resources/openresty/nginx/luaext/msbconf.lua @@ -0,0 +1,26 @@ +--[[ + + Copyright 2016 2015-2016 ZTE, Inc. and others. 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. + + Author: Zhaoxing Meng + email: meng.zhaoxing1@zte.com.cn + +]] +local _M = {} +_M._VERSION = '1.0.0' + +return { + auth_plugin_status = "on" +}
\ No newline at end of file diff --git a/msb-core/eag-openresty-ext/src/assembly/resources/openresty/nginx/sites-enabled/openomsb.conf b/msb-core/eag-openresty-ext/src/assembly/resources/openresty/nginx/sites-enabled/openomsb.conf new file mode 100644 index 0000000..eadf6c0 --- /dev/null +++ b/msb-core/eag-openresty-ext/src/assembly/resources/openresty/nginx/sites-enabled/openomsb.conf @@ -0,0 +1,172 @@ +# +# Copyright 2016 2015-2016 ZTE, Inc. and others. 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. +# +# Author: Zhaoxing Meng +# email: meng.zhaoxing1@zte.com.cn +# + +server { + listen 8080; + default_type text/html; + add_header X-Cache-Status $upstream_cache_status; + + location = / { + rewrite ^ /openoui/microservices/index.html redirect; + } + + location = /openoui/microservices { + rewrite /openoui/microservices /openoui/microservices/index.html redirect; + } + + location / { + set $server "fallback"; + set $url ""; + set $key ""; + + # Lua files + rewrite_by_lua_file luaext/customrouter.lua; + access_by_lua_file luaext/execute_auth.lua; + + proxy_pass http://$server; + } + location ~ ^/api/(.*) { + rewrite ^/api/(.*) /openoapi/$1 last; + } + location ~ ^/iui/(.*) { + rewrite ^/iui/(.*) /openoui/$1 last; + } + + location ^~ /openoapi/driver_vmware_vcloud/v1 { + set $backend ""; + # Lua files + access_by_lua_block { + local driver_manager = require('plugins.driver_manager') + driver_manager.access() + } + proxy_pass http://$backend; + } + location ~ ^/openoapi/([^/]+)(/[Vv][^/]*)?(.*) { + set $apiname $1; + set $apiversion $2; + set $apiserver "fallback"; + set $apiurl ""; + + # Lua files + rewrite_by_lua_file luaext/openoapirouter.lua; + access_by_lua_file luaext/execute_auth.lua; + + proxy_pass http://$apiserver; + } + + location ~ ^/openoui/([^/]+)(.*) { + location ~* ^/iui/([^/]+)(.*)\.(?:png|jpg|jpeg|js|css|html|gif|ico|bmp|woff)$ { + set $iuiname $1; + set $iuiparam $2; + set $iuiserver "fallback"; + set $iuiurl ""; + + # Lua files + rewrite_by_lua_file luaext/openouirouter.lua; + access_by_lua_file luaext/execute_auth.lua; + + proxy_cache nginx_cache; + proxy_cache_key $host$uri$is_args$args; + proxy_cache_valid 200 304 12h ; + proxy_cache_valid 301 302 1m ; + proxy_cache_valid any 1m ; + expires 12h; + + proxy_pass http://$iuiserver; + } + set $iuiname $1; + set $iuiparam $2; + set $iuiserver "fallback"; + set $iuiurl ""; + + # Lua files + rewrite_by_lua_file luaext/openouirouter.lua; + access_by_lua_file luaext/execute_auth.lua; + + proxy_pass http://$iuiserver; + } + + location ~ ^/admin/([^/]+)(/[Vv][^/]*)?(.*) { + set $apiname $1; + set $apiversion $2; + set $apiserver "fallback"; + set $adminurl ""; + + # Lua files + rewrite_by_lua_file luaext/openoadminrouter.lua; + access_by_lua_file luaext/execute_auth.lua; + + proxy_pass http://$apiserver; + } + + location ~ ^/apijson/([^/]+)(/[Vv][^/]*)?(.*) { + location ~* ^/apijson/([^/]+)(/[v][^/]*)?(.*)\.(?:png|jpg|jpeg|js|css|html|gif|ico|bmp|woff)$ { + set $apiname $1; + set $apiversion $2; + set $apiserver "fallback"; + set $apijsonurl ""; + + # Lua files + rewrite_by_lua_file luaext/openoapijsonrouter.lua; + access_by_lua_file luaext/execute_auth.lua; + + proxy_cache nginx_cache; + proxy_cache_key $host$uri$is_args$args; + proxy_cache_valid 200 304 12h ; + proxy_cache_valid 301 302 1m ; + proxy_cache_valid any 1m ; + expires 12h; + + proxy_pass http://$apiserver; + } + set $apiname $1; + set $apiversion $2; + set $apiserver "fallback"; + set $apijsonurl ""; + + # Lua files + rewrite_by_lua_file luaext/openoapijsonrouter.lua; + access_by_lua_file luaext/execute_auth.lua; + + proxy_pass http://$apiserver; + } + + location ~* \.(?:png|jpg|jpeg|js|css|html|gif|ico|bmp|woff)$ { + set $server "fallback"; + set $url ""; + set $key ""; + + # Lua files + rewrite_by_lua_file luaext/customrouter.lua; + access_by_lua_file luaext/execute_auth.lua; + + proxy_cache nginx_cache; + proxy_cache_key $host$uri$is_args$args; + proxy_cache_valid 200 304 12h ; + proxy_cache_valid 301 302 1m ; + proxy_cache_valid any 1m ; + expires 12h; + + proxy_pass http://$server; + } + + location = /favicon.ico { + log_not_found off; + } +}
\ No newline at end of file diff --git a/msb-core/openresty-ext/src/assembly/resources/openresty/lualib/resty/http.lua b/msb-core/openresty-ext/src/assembly/resources/openresty/lualib/resty/http.lua new file mode 100644 index 0000000..94f9813 --- /dev/null +++ b/msb-core/openresty-ext/src/assembly/resources/openresty/lualib/resty/http.lua @@ -0,0 +1,850 @@ +local http_headers = require "resty.http_headers" + +local ngx_socket_tcp = ngx.socket.tcp +local ngx_req = ngx.req +local ngx_req_socket = ngx_req.socket +local ngx_req_get_headers = ngx_req.get_headers +local ngx_req_get_method = ngx_req.get_method +local str_gmatch = string.gmatch +local str_lower = string.lower +local str_upper = string.upper +local str_find = string.find +local str_sub = string.sub +local str_gsub = string.gsub +local tbl_concat = table.concat +local tbl_insert = table.insert +local ngx_encode_args = ngx.encode_args +local ngx_re_match = ngx.re.match +local ngx_re_gsub = ngx.re.gsub +local ngx_log = ngx.log +local ngx_DEBUG = ngx.DEBUG +local ngx_ERR = ngx.ERR +local ngx_NOTICE = ngx.NOTICE +local ngx_var = ngx.var +local co_yield = coroutine.yield +local co_create = coroutine.create +local co_status = coroutine.status +local co_resume = coroutine.resume + + +-- http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.5.1 +local HOP_BY_HOP_HEADERS = { + ["connection"] = true, + ["keep-alive"] = true, + ["proxy-authenticate"] = true, + ["proxy-authorization"] = true, + ["te"] = true, + ["trailers"] = true, + ["transfer-encoding"] = true, + ["upgrade"] = true, + ["content-length"] = true, -- Not strictly hop-by-hop, but Nginx will deal + -- with this (may send chunked for example). +} + + +-- Reimplemented coroutine.wrap, returning "nil, err" if the coroutine cannot +-- be resumed. This protects user code from inifite loops when doing things like +-- repeat +-- local chunk, err = res.body_reader() +-- if chunk then -- <-- This could be a string msg in the core wrap function. +-- ... +-- end +-- until not chunk +local co_wrap = function(func) + local co = co_create(func) + if not co then + return nil, "could not create coroutine" + else + return function(...) + if co_status(co) == "suspended" then + return select(2, co_resume(co, ...)) + else + return nil, "can't resume a " .. co_status(co) .. " coroutine" + end + end + end +end + + +local _M = { + _VERSION = '0.09', +} +_M._USER_AGENT = "lua-resty-http/" .. _M._VERSION .. " (Lua) ngx_lua/" .. ngx.config.ngx_lua_version + +local mt = { __index = _M } + + +local HTTP = { + [1.0] = " HTTP/1.0\r\n", + [1.1] = " HTTP/1.1\r\n", +} + +local DEFAULT_PARAMS = { + method = "GET", + path = "/", + version = 1.1, +} + + +function _M.new(self) + local sock, err = ngx_socket_tcp() + if not sock then + return nil, err + end + return setmetatable({ sock = sock, keepalive = true }, mt) +end + + +function _M.set_timeout(self, timeout) + local sock = self.sock + if not sock then + return nil, "not initialized" + end + + return sock:settimeout(timeout) +end + + +function _M.ssl_handshake(self, ...) + local sock = self.sock + if not sock then + return nil, "not initialized" + end + + self.ssl = true + + return sock:sslhandshake(...) +end + + +function _M.connect(self, ...) + local sock = self.sock + if not sock then + return nil, "not initialized" + end + + self.host = select(1, ...) + self.port = select(2, ...) + + -- If port is not a number, this is likely a unix domain socket connection. + if type(self.port) ~= "number" then + self.port = nil + end + + self.keepalive = true + + return sock:connect(...) +end + + +function _M.set_keepalive(self, ...) + local sock = self.sock + if not sock then + return nil, "not initialized" + end + + if self.keepalive == true then + return sock:setkeepalive(...) + else + -- The server said we must close the connection, so we cannot setkeepalive. + -- If close() succeeds we return 2 instead of 1, to differentiate between + -- a normal setkeepalive() failure and an intentional close(). + local res, err = sock:close() + if res then + return 2, "connection must be closed" + else + return res, err + end + end +end + + +function _M.get_reused_times(self) + local sock = self.sock + if not sock then + return nil, "not initialized" + end + + return sock:getreusedtimes() +end + + +function _M.close(self) + local sock = self.sock + if not sock then + return nil, "not initialized" + end + + return sock:close() +end + + +local function _should_receive_body(method, code) + if method == "HEAD" then return nil end + if code == 204 or code == 304 then return nil end + if code >= 100 and code < 200 then return nil end + return true +end + + +function _M.parse_uri(self, uri) + local m, err = ngx_re_match(uri, [[^(http[s]?)://([^:/]+)(?::(\d+))?(.*)]], + "jo") + + if not m then + if err then + return nil, "failed to match the uri: " .. uri .. ", " .. err + end + + return nil, "bad uri: " .. uri + else + if m[3] then + m[3] = tonumber(m[3]) + else + if m[1] == "https" then + m[3] = 443 + else + m[3] = 80 + end + end + if not m[4] or "" == m[4] then m[4] = "/" end + return m, nil + end +end + + +local function _format_request(params) + local version = params.version + local headers = params.headers or {} + + local query = params.query or "" + if query then + if type(query) == "table" then + query = "?" .. ngx_encode_args(query) + end + end + + -- Initialize request + local req = { + str_upper(params.method), + " ", + params.path, + query, + HTTP[version], + -- Pre-allocate slots for minimum headers and carriage return. + true, + true, + true, + } + local c = 6 -- req table index it's faster to do this inline vs table.insert + + -- Append headers + for key, values in pairs(headers) do + if type(values) ~= "table" then + values = {values} + end + + key = tostring(key) + for _, value in pairs(values) do + req[c] = key .. ": " .. tostring(value) .. "\r\n" + c = c + 1 + end + end + + -- Close headers + req[c] = "\r\n" + + return tbl_concat(req) +end + + +local function _receive_status(sock) + local line, err = sock:receive("*l") + if not line then + return nil, nil, nil, err + end + + return tonumber(str_sub(line, 10, 12)), tonumber(str_sub(line, 6, 8)), str_sub(line, 14) +end + + + +local function _receive_headers(sock) + local headers = http_headers.new() + + repeat + local line, err = sock:receive("*l") + if not line then + return nil, err + end + + for key, val in str_gmatch(line, "([^:%s]+):%s*(.+)") do + if headers[key] then + if type(headers[key]) ~= "table" then + headers[key] = { headers[key] } + end + tbl_insert(headers[key], tostring(val)) + else + headers[key] = tostring(val) + end + end + until str_find(line, "^%s*$") + + return headers, nil +end + + +local function _chunked_body_reader(sock, default_chunk_size) + return co_wrap(function(max_chunk_size) + local max_chunk_size = max_chunk_size or default_chunk_size + local remaining = 0 + local length + + repeat + -- If we still have data on this chunk + if max_chunk_size and remaining > 0 then + + if remaining > max_chunk_size then + -- Consume up to max_chunk_size + length = max_chunk_size + remaining = remaining - max_chunk_size + else + -- Consume all remaining + length = remaining + remaining = 0 + end + else -- This is a fresh chunk + + -- Receive the chunk size + local str, err = sock:receive("*l") + if not str then + co_yield(nil, err) + end + + length = tonumber(str, 16) + + if not length then + co_yield(nil, "unable to read chunksize") + end + + if max_chunk_size and length > max_chunk_size then + -- Consume up to max_chunk_size + remaining = length - max_chunk_size + length = max_chunk_size + end + end + + if length > 0 then + local str, err = sock:receive(length) + if not str then + co_yield(nil, err) + end + + max_chunk_size = co_yield(str) or default_chunk_size + + -- If we're finished with this chunk, read the carriage return. + if remaining == 0 then + sock:receive(2) -- read \r\n + end + else + -- Read the last (zero length) chunk's carriage return + sock:receive(2) -- read \r\n + end + + until length == 0 + end) +end + + +local function _body_reader(sock, content_length, default_chunk_size) + return co_wrap(function(max_chunk_size) + local max_chunk_size = max_chunk_size or default_chunk_size + + if not content_length and max_chunk_size then + -- We have no length, but wish to stream. + -- HTTP 1.0 with no length will close connection, so read chunks to the end. + repeat + local str, err, partial = sock:receive(max_chunk_size) + if not str and err == "closed" then + max_chunk_size = tonumber(co_yield(partial, err) or default_chunk_size) + end + + max_chunk_size = tonumber(co_yield(str) or default_chunk_size) + if max_chunk_size and max_chunk_size < 0 then max_chunk_size = nil end + + if not max_chunk_size then + ngx_log(ngx_ERR, "Buffer size not specified, bailing") + break + end + until not str + + elseif not content_length then + -- We have no length but don't wish to stream. + -- HTTP 1.0 with no length will close connection, so read to the end. + co_yield(sock:receive("*a")) + + elseif not max_chunk_size then + -- We have a length and potentially keep-alive, but want everything. + co_yield(sock:receive(content_length)) + + else + -- We have a length and potentially a keep-alive, and wish to stream + -- the response. + local received = 0 + repeat + local length = max_chunk_size + if received + length > content_length then + length = content_length - received + end + + if length > 0 then + local str, err = sock:receive(length) + if not str then + max_chunk_size = tonumber(co_yield(nil, err) or default_chunk_size) + end + received = received + length + + max_chunk_size = tonumber(co_yield(str) or default_chunk_size) + if max_chunk_size and max_chunk_size < 0 then max_chunk_size = nil end + + if not max_chunk_size then + ngx_log(ngx_ERR, "Buffer size not specified, bailing") + break + end + end + + until length == 0 + end + end) +end + + +local function _no_body_reader() + return nil +end + + +local function _read_body(res) + local reader = res.body_reader + + if not reader then + -- Most likely HEAD or 304 etc. + return nil, "no body to be read" + end + + local chunks = {} + local c = 1 + + local chunk, err + repeat + chunk, err = reader() + + if err then + return nil, err, tbl_concat(chunks) -- Return any data so far. + end + if chunk then + chunks[c] = chunk + c = c + 1 + end + until not chunk + + return tbl_concat(chunks) +end + + +local function _trailer_reader(sock) + return co_wrap(function() + co_yield(_receive_headers(sock)) + end) +end + + +local function _read_trailers(res) + local reader = res.trailer_reader + if not reader then + return nil, "no trailers" + end + + local trailers = reader() + setmetatable(res.headers, { __index = trailers }) +end + + +local function _send_body(sock, body) + if type(body) == 'function' then + repeat + local chunk, err, partial = body() + + if chunk then + local ok,err = sock:send(chunk) + + if not ok then + return nil, err + end + elseif err ~= nil then + return nil, err, partial + end + + until chunk == nil + elseif body ~= nil then + local bytes, err = sock:send(body) + + if not bytes then + return nil, err + end + end + return true, nil +end + + +local function _handle_continue(sock, body) + local status, version, reason, err = _receive_status(sock) + if not status then + return nil, nil, err + end + + -- Only send body if we receive a 100 Continue + if status == 100 then + local ok, err = sock:receive("*l") -- Read carriage return + if not ok then + return nil, nil, err + end + _send_body(sock, body) + end + return status, version, err +end + + +function _M.send_request(self, params) + -- Apply defaults + setmetatable(params, { __index = DEFAULT_PARAMS }) + + local sock = self.sock + local body = params.body + local headers = http_headers.new() + + local params_headers = params.headers + if params_headers then + -- We assign one by one so that the metatable can handle case insensitivity + -- for us. You can blame the spec for this inefficiency. + for k,v in pairs(params_headers) do + headers[k] = v + end + end + + -- Ensure minimal headers are set + if type(body) == 'string' and not headers["Content-Length"] then + headers["Content-Length"] = #body + end + if not headers["Host"] then + if (str_sub(self.host, 1, 5) == "unix:") then + return nil, "Unable to generate a useful Host header for a unix domain socket. Please provide one." + end + -- If we have a port (i.e. not connected to a unix domain socket), and this + -- port is non-standard, append it to the Host heaer. + if self.port then + if self.ssl and self.port ~= 443 then + headers["Host"] = self.host .. ":" .. self.port + elseif not self.ssl and self.port ~= 80 then + headers["Host"] = self.host .. ":" .. self.port + else + headers["Host"] = self.host + end + else + headers["Host"] = self.host + end + end + if not headers["User-Agent"] then + headers["User-Agent"] = _M._USER_AGENT + end + if params.version == 1.0 and not headers["Connection"] then + headers["Connection"] = "Keep-Alive" + end + + params.headers = headers + + -- Format and send request + local req = _format_request(params) + ngx_log(ngx_DEBUG, "\n", req) + local bytes, err = sock:send(req) + + if not bytes then + return nil, err + end + + -- Send the request body, unless we expect: continue, in which case + -- we handle this as part of reading the response. + if headers["Expect"] ~= "100-continue" then + local ok, err, partial = _send_body(sock, body) + if not ok then + return nil, err, partial + end + end + + return true +end + + +function _M.read_response(self, params) + local sock = self.sock + + local status, version, reason, err + + -- If we expect: continue, we need to handle this, sending the body if allowed. + -- If we don't get 100 back, then status is the actual status. + if params.headers["Expect"] == "100-continue" then + local _status, _version, _err = _handle_continue(sock, params.body) + if not _status then + return nil, _err + elseif _status ~= 100 then + status, version, err = _status, _version, _err + end + end + + -- Just read the status as normal. + if not status then + status, version, reason, err = _receive_status(sock) + if not status then + return nil, err + end + end + + + local res_headers, err = _receive_headers(sock) + if not res_headers then + return nil, err + end + + -- keepalive is true by default. Determine if this is correct or not. + local ok, connection = pcall(str_lower, res_headers["Connection"]) + if ok then + if (version == 1.1 and connection == "close") or + (version == 1.0 and connection ~= "keep-alive") then + self.keepalive = false + end + else + -- no connection header + if version == 1.0 then + self.keepalive = false + end + end + + local body_reader = _no_body_reader + local trailer_reader, err = nil, nil + local has_body = false + + -- Receive the body_reader + if _should_receive_body(params.method, status) then + local ok, encoding = pcall(str_lower, res_headers["Transfer-Encoding"]) + if ok and version == 1.1 and encoding == "chunked" then + body_reader, err = _chunked_body_reader(sock) + has_body = true + else + + local ok, length = pcall(tonumber, res_headers["Content-Length"]) + if ok then + body_reader, err = _body_reader(sock, length) + has_body = true + end + end + end + + if res_headers["Trailer"] then + trailer_reader, err = _trailer_reader(sock) + end + + if err then + return nil, err + else + return { + status = status, + reason = reason, + headers = res_headers, + has_body = has_body, + body_reader = body_reader, + read_body = _read_body, + trailer_reader = trailer_reader, + read_trailers = _read_trailers, + } + end +end + + +function _M.request(self, params) + local res, err = self:send_request(params) + if not res then + return res, err + else + return self:read_response(params) + end +end + + +function _M.request_pipeline(self, requests) + for i, params in ipairs(requests) do + if params.headers and params.headers["Expect"] == "100-continue" then + return nil, "Cannot pipeline request specifying Expect: 100-continue" + end + + local res, err = self:send_request(params) + if not res then + return res, err + end + end + + local responses = {} + for i, params in ipairs(requests) do + responses[i] = setmetatable({ + params = params, + response_read = false, + }, { + -- Read each actual response lazily, at the point the user tries + -- to access any of the fields. + __index = function(t, k) + local res, err + if t.response_read == false then + res, err = _M.read_response(self, t.params) + t.response_read = true + + if not res then + ngx_log(ngx_ERR, err) + else + for rk, rv in pairs(res) do + t[rk] = rv + end + end + end + return rawget(t, k) + end, + }) + end + return responses +end + + +function _M.request_uri(self, uri, params) + if not params then params = {} end + + local parsed_uri, err = self:parse_uri(uri) + if not parsed_uri then + return nil, err + end + + local scheme, host, port, path = unpack(parsed_uri) + if not params.path then params.path = path end + + local c, err = self:connect(host, port) + if not c then + return nil, err + end + + if scheme == "https" then + local verify = true + if params.ssl_verify == false then + verify = false + end + local ok, err = self:ssl_handshake(nil, host, verify) + if not ok then + return nil, err + end + end + + local res, err = self:request(params) + if not res then + return nil, err + end + + local body, err = res:read_body() + if not body then + return nil, err + end + + res.body = body + + local ok, err = self:set_keepalive() + if not ok then + ngx_log(ngx_ERR, err) + end + + return res, nil +end + + +function _M.get_client_body_reader(self, chunksize, sock) + local chunksize = chunksize or 65536 + if not sock then + local ok, err + ok, sock, err = pcall(ngx_req_socket) + + if not ok then + return nil, sock -- pcall err + end + + if not sock then + if err == "no body" then + return nil + else + return nil, err + end + end + end + + local headers = ngx_req_get_headers() + local length = headers.content_length + local encoding = headers.transfer_encoding + if length then + return _body_reader(sock, tonumber(length), chunksize) + elseif encoding and str_lower(encoding) == 'chunked' then + -- Not yet supported by ngx_lua but should just work... + return _chunked_body_reader(sock, chunksize) + else + return nil + end +end + + +function _M.proxy_request(self, chunksize) + return self:request{ + method = ngx_req_get_method(), + path = ngx_re_gsub(ngx_var.uri, "\\s", "%20", "jo") .. ngx_var.is_args .. (ngx_var.query_string or ""), + body = self:get_client_body_reader(chunksize), + headers = ngx_req_get_headers(), + } +end + + +function _M.proxy_response(self, response, chunksize) + if not response then + ngx_log(ngx_ERR, "no response provided") + return + end + + ngx.status = response.status + + -- Filter out hop-by-hop headeres + for k,v in pairs(response.headers) do + if not HOP_BY_HOP_HEADERS[str_lower(k)] then + ngx.header[k] = v + end + end + + local reader = response.body_reader + repeat + local chunk, err = reader(chunksize) + if err then + ngx_log(ngx_ERR, err) + break + end + + if chunk then + local res, err = ngx.print(chunk) + if not res then + ngx_log(ngx_ERR, err) + break + end + end + until not chunk +end + + +return _M diff --git a/msb-core/openresty-ext/src/assembly/resources/openresty/lualib/resty/http_headers.lua b/msb-core/openresty-ext/src/assembly/resources/openresty/lualib/resty/http_headers.lua new file mode 100644 index 0000000..24b53b5 --- /dev/null +++ b/msb-core/openresty-ext/src/assembly/resources/openresty/lualib/resty/http_headers.lua @@ -0,0 +1,62 @@ +local rawget, rawset, setmetatable = + rawget, rawset, setmetatable + +local str_gsub = string.gsub +local str_lower = string.lower + + +local _M = { + _VERSION = '0.01', +} + + +-- Returns an empty headers table with internalised case normalisation. +-- Supports the same cases as in ngx_lua: +-- +-- headers.content_length +-- headers["content-length"] +-- headers["Content-Length"] +function _M.new(self) + local mt = { + normalised = {}, + } + + + mt.__index = function(t, k) + local k_hyphened = str_gsub(k, "_", "-") + local matched = rawget(t, k) + if matched then + return matched + else + local k_normalised = str_lower(k_hyphened) + return rawget(t, mt.normalised[k_normalised]) + end + end + + + -- First check the normalised table. If there's no match (first time) add an entry for + -- our current case in the normalised table. This is to preserve the human (prettier) case + -- instead of outputting lowercased header names. + -- + -- If there's a match, we're being updated, just with a different case for the key. We use + -- the normalised table to give us the original key, and perorm a rawset(). + mt.__newindex = function(t, k, v) + -- we support underscore syntax, so always hyphenate. + local k_hyphened = str_gsub(k, "_", "-") + + -- lowercase hyphenated is "normalised" + local k_normalised = str_lower(k_hyphened) + + if not mt.normalised[k_normalised] then + mt.normalised[k_normalised] = k_hyphened + rawset(t, k_hyphened, v) + else + rawset(t, mt.normalised[k_normalised], v) + end + end + + return setmetatable({}, mt) +end + + +return _M diff --git a/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/conf/nginx.conf b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/conf/nginx.conf index c5dc770..1ac9aff 100644 --- a/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/conf/nginx.conf +++ b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/conf/nginx.conf @@ -55,7 +55,7 @@ http { access_log off; # Lua settings - lua_package_path "$prefix/../lualib/?.lua;;"; + lua_package_path "$prefix/../lualib/?.lua;$prefix/luaext/?.lua;;"; lua_shared_dict ceryx 10M; lua_code_cache on; diff --git a/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/customrouter.lua b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/customrouter.lua index d1f476a..d6b67f3 100644 --- a/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/customrouter.lua +++ b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/customrouter.lua @@ -82,22 +82,17 @@ local function query_allkeys_updatecache(red) ngx.log(ngx.ERR,err) return "" end - --把所有键值处理后放到集合中,去除重复 local key_set={} for key, value in ipairs(allkeys) do name = string.gsub(string.gsub(string.gsub(value,"msb:routing:custom:",""),":info",""),":lb:server1","") key_set[name]=true end - --取出所有的�?放到table中准备排�? local key_table = {} local index = 1 for key,_ in pairs(key_set) do - --为了避免效率问题,暂时不用table.insert() - --table.insert(key_table,key) key_table[index] = key index = index + 1 end - --对所有键进行倒序排序,用于实现最长前缀匹配 table.sort(key_table, function (a, b) return a > b end) @@ -154,11 +149,9 @@ local function query_router_info() end local delimiter = "<>" - -- '.-' 表示最短匹�? for key in string.gmatch(servicenames,"(.-)"..delimiter) do ngx.log(ngx.WARN, "==key_table key:", key) local from, to, err = ngx.re.find(uri, "^"..key.."(/(.*))?$", "jo") - --判断key是否为输入uri�?前缀" if from then ngx.log(ngx.WARN,"Matched! start-end:",from,"-",to) local result = query_ipurl_updatecache(red,key) diff --git a/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/execute_auth.lua b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/execute_auth.lua new file mode 100644 index 0000000..c8ea047 --- /dev/null +++ b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/execute_auth.lua @@ -0,0 +1,25 @@ +--[[ + + Copyright 2016 2015-2016 ZTE, Inc. and others. 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. + + Author: Zhaoxing Meng + email: meng.zhaoxing1@zte.com.cn + +]] +local auth_plugin = require('plugins.auth') +local msbconf = require('msbconf') +if(msbconf.auth_plugin_status == "on") then + auth_plugin.access() +end
\ No newline at end of file diff --git a/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/msbconf.lua b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/msbconf.lua new file mode 100644 index 0000000..de8a402 --- /dev/null +++ b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/msbconf.lua @@ -0,0 +1,26 @@ +--[[ + + Copyright 2016 2015-2016 ZTE, Inc. and others. 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. + + Author: Zhaoxing Meng + email: meng.zhaoxing1@zte.com.cn + +]] +local _M = {} +_M._VERSION = '1.0.0' + +return { + auth_plugin_status = "off" +}
\ No newline at end of file diff --git a/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/plugins/auth.lua b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/plugins/auth.lua new file mode 100644 index 0000000..546f1dc --- /dev/null +++ b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/plugins/auth.lua @@ -0,0 +1,26 @@ +--[[ + + Copyright 2016 2015-2016 OEPN-O. and others. 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. + +]] +local _M = {} +_M._VERSION = '1.0.0' + +function _M.access() + --add your own code here + ngx.log(ngx.INFO, "running auth plugin") +end + +return _M
\ No newline at end of file diff --git a/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/plugins/driver_manager.lua b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/plugins/driver_manager.lua new file mode 100644 index 0000000..d337a25 --- /dev/null +++ b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/luaext/plugins/driver_manager.lua @@ -0,0 +1,27 @@ +--[[ + + Copyright 2016 2015-2016 OPEN-O. and others. 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. + +]] +local _M = {} +_M._VERSION = '1.0.0' + +function _M.access() + ngx.log(ngx.INFO, "running driver_manager plugin") + --add your own code here + --choose the right backend server,and then tell nginx, e.g. ngx.var.backend = XX.XX.XX.XX:8888 +end + +return _M
\ No newline at end of file diff --git a/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/sites-enabled/openomsb.conf b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/sites-enabled/openomsb.conf index b529d94..cb60a98 100644 --- a/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/sites-enabled/openomsb.conf +++ b/msb-core/openresty-ext/src/assembly/resources/openresty/nginx/sites-enabled/openomsb.conf @@ -21,7 +21,11 @@ server { listen 80; default_type text/html; add_header X-Cache-Status $upstream_cache_status; - + + location = / { + rewrite ^ /openoui/microservices/index.html redirect; + } + location = /openoui/microservices { rewrite /openoui/microservices /openoui/microservices/index.html redirect; } @@ -33,6 +37,7 @@ server { # Lua files rewrite_by_lua_file luaext/customrouter.lua; + access_by_lua_file luaext/execute_auth.lua; proxy_pass http://$server; } @@ -42,6 +47,16 @@ server { location ~ ^/iui/(.*) { rewrite ^/iui/(.*) /openoui/$1 last; } + + location ^~ /openoapi/driver_vmware_vcloud/v1 { + set $backend ""; + # Lua files + access_by_lua_block { + local driver_manager = require('plugins.driver_manager') + driver_manager.access() + } + proxy_pass http://$backend; + } location ~ ^/openoapi/([^/]+)(/[Vv][^/]*)?(.*) { set $apiname $1; set $apiversion $2; @@ -50,6 +65,7 @@ server { # Lua files rewrite_by_lua_file luaext/openoapirouter.lua; + access_by_lua_file luaext/execute_auth.lua; proxy_pass http://$apiserver; } @@ -63,6 +79,7 @@ server { # Lua files rewrite_by_lua_file luaext/openouirouter.lua; + access_by_lua_file luaext/execute_auth.lua; proxy_cache nginx_cache; proxy_cache_key $host$uri$is_args$args; @@ -80,6 +97,7 @@ server { # Lua files rewrite_by_lua_file luaext/openouirouter.lua; + access_by_lua_file luaext/execute_auth.lua; proxy_pass http://$iuiserver; } @@ -92,6 +110,7 @@ server { # Lua files rewrite_by_lua_file luaext/openoadminrouter.lua; + access_by_lua_file luaext/execute_auth.lua; proxy_pass http://$apiserver; } @@ -105,6 +124,7 @@ server { # Lua files rewrite_by_lua_file luaext/openoapijsonrouter.lua; + access_by_lua_file luaext/execute_auth.lua; proxy_cache nginx_cache; proxy_cache_key $host$uri$is_args$args; @@ -122,6 +142,7 @@ server { # Lua files rewrite_by_lua_file luaext/openoapijsonrouter.lua; + access_by_lua_file luaext/execute_auth.lua; proxy_pass http://$apiserver; } @@ -133,6 +154,7 @@ server { # Lua files rewrite_by_lua_file luaext/customrouter.lua; + access_by_lua_file luaext/execute_auth.lua; proxy_cache nginx_cache; proxy_cache_key $host$uri$is_args$args; diff --git a/msb-core/pom.xml b/msb-core/pom.xml index 71f4192..0fc1b94 100644 --- a/msb-core/pom.xml +++ b/msb-core/pom.xml @@ -33,6 +33,7 @@ <modules> <module>openresty</module> <module>openresty-ext</module> + <module>eag-openresty-ext</module> <module>redis</module> <module>redis-ext</module> <module>apiroute</module> |