kopia lustrzana https://github.com/f4exb/sdrangel
Web API: re-organize online documentation and integrate Swagger-UI
rodzic
3d77c9af9b
commit
4a442e97e7
|
|
@ -1,5 +1,27 @@
|
|||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>index.html</file>
|
||||
<file>webapi/doc/html2/index.html</file>
|
||||
<file>webapi/doc/swagger/swagger.yaml</file>
|
||||
<file>webapi/doc/swagger/include/CWKeyer.yaml</file>
|
||||
<file>webapi/doc/swagger/include/FileSource.yaml</file>
|
||||
<file>webapi/doc/swagger/include/HackRF.yaml</file>
|
||||
<file>webapi/doc/swagger/include/LimeSdr.yaml</file>
|
||||
<file>webapi/doc/swagger/include/NFMDemod.yaml</file>
|
||||
<file>webapi/doc/swagger/include/NFMMod.yaml</file>
|
||||
<file>webapi/doc/swagger/include/RtlSdr.yaml</file>
|
||||
<file>webapi/doc/swagger-ui/swagger-ui.js.map</file>
|
||||
<file>webapi/doc/swagger-ui/swagger-ui.js</file>
|
||||
<file>webapi/doc/swagger-ui/swagger-ui.css.map</file>
|
||||
<file>webapi/doc/swagger-ui/swagger-ui.css</file>
|
||||
<file>webapi/doc/swagger-ui/swagger-ui-standalone-preset.js.map</file>
|
||||
<file>webapi/doc/swagger-ui/swagger-ui-standalone-preset.js</file>
|
||||
<file>webapi/doc/swagger-ui/swagger-ui-bundle.js.map</file>
|
||||
<file>webapi/doc/swagger-ui/swagger-ui-bundle.js</file>
|
||||
<file>webapi/doc/swagger-ui/oauth2-redirect.html</file>
|
||||
<file>webapi/doc/swagger-ui/index.html</file>
|
||||
<file>webapi/doc/swagger-ui/favicon-32x32.png</file>
|
||||
<file>webapi/doc/swagger-ui/favicon-16x16.png</file>
|
||||
<file>webapi/index.html</file>
|
||||
<file>webapi/sdrangel_logo.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
</RCC>
|
||||
|
|
|
|||
Plik binarny nie jest wyświetlany.
|
Po Szerokość: | Wysokość: | Rozmiar: 445 B |
Plik binarny nie jest wyświetlany.
|
Po Szerokość: | Wysokość: | Rozmiar: 1.1 KiB |
|
|
@ -0,0 +1,96 @@
|
|||
<!-- HTML for static distribution bundle build -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Swagger UI</title>
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
|
||||
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
|
||||
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
|
||||
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
|
||||
<style>
|
||||
html
|
||||
{
|
||||
box-sizing: border-box;
|
||||
overflow: -moz-scrollbars-vertical;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
*,
|
||||
*:before,
|
||||
*:after
|
||||
{
|
||||
box-sizing: inherit;
|
||||
}
|
||||
|
||||
body {
|
||||
margin:0;
|
||||
background: #fafafa;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position:absolute;width:0;height:0">
|
||||
<defs>
|
||||
<symbol viewBox="0 0 20 20" id="unlocked">
|
||||
<path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"></path>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 20 20" id="locked">
|
||||
<path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 20 20" id="close">
|
||||
<path d="M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 20 20" id="large-arrow">
|
||||
<path d="M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 20 20" id="large-arrow-down">
|
||||
<path d="M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"/>
|
||||
</symbol>
|
||||
|
||||
|
||||
<symbol viewBox="0 0 24 24" id="jump-to">
|
||||
<path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z"/>
|
||||
</symbol>
|
||||
|
||||
<symbol viewBox="0 0 24 24" id="expand">
|
||||
<path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
|
||||
</symbol>
|
||||
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
<div id="swagger-ui"></div>
|
||||
|
||||
<script src="./swagger-ui-bundle.js"> </script>
|
||||
<script src="./swagger-ui-standalone-preset.js"> </script>
|
||||
<script>
|
||||
window.onload = function() {
|
||||
|
||||
// Build a system
|
||||
const ui = SwaggerUIBundle({
|
||||
url: window.location.protocol + "//" + window.location.host + "/doc/swagger/swagger.yaml",
|
||||
validatorUrl: window.location.protocol + "//" + window.location.host + "/doc/swagger/swagger.yaml",
|
||||
dom_id: '#swagger-ui',
|
||||
deepLinking: true,
|
||||
presets: [
|
||||
SwaggerUIBundle.presets.apis,
|
||||
SwaggerUIStandalonePreset
|
||||
],
|
||||
plugins: [
|
||||
SwaggerUIBundle.plugins.DownloadUrl
|
||||
],
|
||||
layout: "StandaloneLayout"
|
||||
})
|
||||
|
||||
window.ui = ui
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<body onload="run()">
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
'use strict';
|
||||
function run () {
|
||||
var oauth2 = window.opener.swaggerUIRedirectOauth2;
|
||||
var sentState = oauth2.state;
|
||||
var redirectUrl = oauth2.redirectUrl;
|
||||
var isValid, qp, arr;
|
||||
|
||||
if (/code|token|error/.test(window.location.hash)) {
|
||||
qp = window.location.hash.substring(1);
|
||||
} else {
|
||||
qp = location.search.substring(1);
|
||||
}
|
||||
|
||||
arr = qp.split("&")
|
||||
arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';})
|
||||
qp = qp ? JSON.parse('{' + arr.join() + '}',
|
||||
function (key, value) {
|
||||
return key === "" ? value : decodeURIComponent(value)
|
||||
}
|
||||
) : {}
|
||||
|
||||
isValid = qp.state === sentState
|
||||
|
||||
if ((
|
||||
oauth2.auth.schema.get("flow") === "accessCode"||
|
||||
oauth2.auth.schema.get("flow") === "authorizationCode"
|
||||
) && !oauth2.auth.code) {
|
||||
if (!isValid) {
|
||||
oauth2.errCb({
|
||||
authId: oauth2.auth.name,
|
||||
source: "auth",
|
||||
level: "warning",
|
||||
message: "Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"
|
||||
});
|
||||
}
|
||||
|
||||
if (qp.code) {
|
||||
delete oauth2.state;
|
||||
oauth2.auth.code = qp.code;
|
||||
oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
|
||||
} else {
|
||||
oauth2.errCb({
|
||||
authId: oauth2.auth.name,
|
||||
source: "auth",
|
||||
level: "error",
|
||||
message: "Authorization failed: no accessCode received from the server"
|
||||
});
|
||||
}
|
||||
} else {
|
||||
oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
|
||||
}
|
||||
window.close();
|
||||
}
|
||||
</script>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sources":[],"names":[],"mappings":"","file":"swagger-ui.css","sourceRoot":""}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,12 @@
|
|||
CWKeyerSettings:
|
||||
properties:
|
||||
sampleRate:
|
||||
type: integer
|
||||
wpm:
|
||||
type: integer
|
||||
mode:
|
||||
type: integer
|
||||
text:
|
||||
type: string
|
||||
loop:
|
||||
type: integer
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
FileSourceSettings:
|
||||
description: FileSource
|
||||
properties:
|
||||
fileName:
|
||||
type: string
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
HackRFInputSettings:
|
||||
description: HackRF
|
||||
properties:
|
||||
centerFrequency:
|
||||
type: integer
|
||||
format: int64
|
||||
LOppmTenths:
|
||||
type: integer
|
||||
bandwidth:
|
||||
type: integer
|
||||
lnaGain:
|
||||
type: integer
|
||||
vgaGain:
|
||||
type: integer
|
||||
log2Decim:
|
||||
type: integer
|
||||
fcPos:
|
||||
description: 0=Infra 1=Supra 2=Center
|
||||
type: integer
|
||||
devSampleRate:
|
||||
type: integer
|
||||
biasT:
|
||||
type: integer
|
||||
lnaExt:
|
||||
type: integer
|
||||
dcBlock:
|
||||
type: integer
|
||||
iqCorrection:
|
||||
type: integer
|
||||
linkTxFrequency:
|
||||
type: integer
|
||||
|
||||
HackRFOutputSettings:
|
||||
description: HackRF
|
||||
properties:
|
||||
centerFrequency:
|
||||
type: integer
|
||||
format: int64
|
||||
LOppmTenths:
|
||||
type: integer
|
||||
bandwidth:
|
||||
type: integer
|
||||
vgaGain:
|
||||
type: integer
|
||||
log2Interp:
|
||||
type: integer
|
||||
devSampleRate:
|
||||
type: integer
|
||||
biasT:
|
||||
type: integer
|
||||
lnaExt:
|
||||
type: integer
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
LimeSdrInputSettings:
|
||||
description: LimeSDR
|
||||
properties:
|
||||
centerFrequency:
|
||||
type: integer
|
||||
format: int64
|
||||
devSampleRate:
|
||||
type: integer
|
||||
log2HardDecim:
|
||||
type: integer
|
||||
dcBlock:
|
||||
type: integer
|
||||
iqCorrection:
|
||||
type: integer
|
||||
log2SoftDecim:
|
||||
type: integer
|
||||
lpfBW:
|
||||
type: integer
|
||||
lpfFIREnable:
|
||||
type: integer
|
||||
lpfFIRBW:
|
||||
type: integer
|
||||
gain:
|
||||
type: integer
|
||||
ncoEnable:
|
||||
type: integer
|
||||
ncoFrequency:
|
||||
type: integer
|
||||
antennaPath:
|
||||
type: integer
|
||||
gainMode:
|
||||
type: integer
|
||||
lnaGain:
|
||||
type: integer
|
||||
tiaGain:
|
||||
type: integer
|
||||
pgaGain:
|
||||
type: integer
|
||||
extClock:
|
||||
type: integer
|
||||
extClockFreq:
|
||||
type: integer
|
||||
|
||||
LimeSdrOutputSettings:
|
||||
description: LimeSDR
|
||||
properties:
|
||||
centerFrequency:
|
||||
type: integer
|
||||
format: int64
|
||||
devSampleRate:
|
||||
type: integer
|
||||
log2HardInterp:
|
||||
type: integer
|
||||
log2SoftInterp:
|
||||
type: integer
|
||||
lpfBW:
|
||||
type: integer
|
||||
lpfFIREnable:
|
||||
type: integer
|
||||
lpfFIRBW:
|
||||
type: integer
|
||||
gain:
|
||||
type: integer
|
||||
ncoEnable:
|
||||
type: integer
|
||||
ncoFrequency:
|
||||
type: integer
|
||||
antennaPath:
|
||||
type: integer
|
||||
extClock:
|
||||
type: integer
|
||||
extClockFreq:
|
||||
type: integer
|
||||
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
NFMDemodSettings:
|
||||
description: NFMDemod
|
||||
properties:
|
||||
inputFrequencyOffset:
|
||||
type: integer
|
||||
format: int64
|
||||
rfBandwidth:
|
||||
type: number
|
||||
format: float
|
||||
afBandwidth:
|
||||
type: number
|
||||
format: float
|
||||
fmDeviation:
|
||||
type: integer
|
||||
squelchGate:
|
||||
type: integer
|
||||
deltaSquelch:
|
||||
type: integer
|
||||
squelch:
|
||||
type: number
|
||||
format: float
|
||||
volume:
|
||||
type: number
|
||||
format: float
|
||||
ctcssOn:
|
||||
type: integer
|
||||
audioMute:
|
||||
type: integer
|
||||
ctcssIndex:
|
||||
type: integer
|
||||
audioSampleRate:
|
||||
type: integer
|
||||
copyAudioToUDP:
|
||||
type: integer
|
||||
udpAddress:
|
||||
type: string
|
||||
udpPort:
|
||||
type: integer
|
||||
rgbColor:
|
||||
type: integer
|
||||
title:
|
||||
type: string
|
||||
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
NFMModSettings:
|
||||
description: NFMMod
|
||||
properties:
|
||||
inputFrequencyOffset:
|
||||
type: integer
|
||||
format: int64
|
||||
rfBandwidth:
|
||||
type: number
|
||||
format: float
|
||||
afBandwidth:
|
||||
type: number
|
||||
format: float
|
||||
fmDeviation:
|
||||
type: number
|
||||
format: float
|
||||
toneFrequency:
|
||||
type: number
|
||||
format: float
|
||||
volumeFactor:
|
||||
type: number
|
||||
format: float
|
||||
audioSampleRate:
|
||||
type: integer
|
||||
channelMute:
|
||||
type: integer
|
||||
playLoop:
|
||||
type: integer
|
||||
ctcssOn:
|
||||
type: integer
|
||||
ctcssIndex:
|
||||
type: integer
|
||||
rgbColor:
|
||||
type: integer
|
||||
title:
|
||||
type: string
|
||||
modAFInput:
|
||||
type: integer
|
||||
cwKeyer:
|
||||
$ref: "/doc/swagger/include/CWKeyer.yaml#/CWKeyerSettings"
|
||||
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
RtlSdrSettings:
|
||||
description: RTLSDR
|
||||
properties:
|
||||
devSampleRate:
|
||||
type: integer
|
||||
lowSampleRate:
|
||||
type: integer
|
||||
centerFrequency:
|
||||
type: integer
|
||||
format: int64
|
||||
gain:
|
||||
type: integer
|
||||
loPpmCorrection:
|
||||
type: integer
|
||||
log2Decim:
|
||||
type: integer
|
||||
fcPos:
|
||||
type: integer
|
||||
dcBlock:
|
||||
type: integer
|
||||
iqImbalance:
|
||||
type: integer
|
||||
agc:
|
||||
type: integer
|
||||
noModMode:
|
||||
type: integer
|
||||
transverterMode:
|
||||
type: integer
|
||||
transverterDeltaFrequency:
|
||||
type: integer
|
||||
format: int64
|
||||
rfBandwidth:
|
||||
type: integer
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
User:
|
||||
required:
|
||||
- index
|
||||
- name
|
||||
properties:
|
||||
index:
|
||||
type: integer
|
||||
name:
|
||||
type: string
|
||||
Plik diff jest za duży
Load Diff
|
|
@ -0,0 +1,52 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>SDRangel API documentation</title>
|
||||
<style type="text/css">
|
||||
body {
|
||||
padding-left: 13em;
|
||||
font-family: Helvetica, Geneva, Arial, SunSans-Regular, sans-serif;
|
||||
color: black;
|
||||
background-color: white }
|
||||
h1 {
|
||||
font-family: Helvetica, Geneva, Arial, SunSans-Regular, sans-serif;
|
||||
color: #6086D3 }
|
||||
ul.navbar {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
top: 2em;
|
||||
left: 1em;
|
||||
width: 11em }
|
||||
ul.navbar li {
|
||||
background: #dddddd;
|
||||
margin: 0.5em 0;
|
||||
padding: 0.3em;
|
||||
border-right: 1em solid black }
|
||||
ul.navbar a {
|
||||
text-decoration: none }
|
||||
a:link {
|
||||
color: #315db4 }
|
||||
a:visited {
|
||||
color: #315db4 }
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- Site navigation menu -->
|
||||
<ul class="navbar">
|
||||
<li><a href="doc/html2/index.html">Static HTML2 documentation</a>
|
||||
<li><a href="doc/swagger-ui/index.html">Interactive Swagger UI documentation</a>
|
||||
</ul>
|
||||
|
||||
<!-- Main content -->
|
||||
<img src="sdrangel_logo.png" alt="SDRangel">
|
||||
|
||||
<h1>SDRangel API documentation</h1>
|
||||
|
||||
<p>Click on links on the left for various types of documentation</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Plik binarny nie jest wyświetlany.
|
Po Szerokość: | Wysokość: | Rozmiar: 72 KiB |
|
|
@ -16,7 +16,7 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//#include <QDirIterator>
|
||||
#include <QDirIterator>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonArray>
|
||||
|
||||
|
|
@ -47,7 +47,7 @@ WebAPIRequestMapper::WebAPIRequestMapper(QObject* parent) :
|
|||
m_adapter(0)
|
||||
{
|
||||
qtwebapp::HttpDocrootSettings docrootSettings;
|
||||
docrootSettings.path = ":/";
|
||||
docrootSettings.path = ":/webapi";
|
||||
m_staticFileController = new qtwebapp::StaticFileController(docrootSettings, parent);
|
||||
}
|
||||
|
||||
|
|
@ -119,11 +119,9 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http
|
|||
} else if (std::regex_match(pathStr, desc_match, WebAPIAdapterInterface::devicesetChannelSettingsURLRe)) {
|
||||
devicesetChannelSettingsService(std::string(desc_match[1]), std::string(desc_match[2]), request, response);
|
||||
}
|
||||
else
|
||||
else // serve static documentation pages
|
||||
{
|
||||
QByteArray path = "/index.html";
|
||||
response.setStatus(400, "API URL does not exist");
|
||||
m_staticFileController->service(path, response);
|
||||
m_staticFileController->service(request, response);
|
||||
}
|
||||
|
||||
// QDirIterator it(":", QDirIterator::Subdirectories);
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ AboutDialog::AboutDialog(const QString& apiHost, int apiPort, QWidget* parent) :
|
|||
ui->build->setText(QString("Build info: Qt %1 %2 bits").arg(QT_VERSION_STR).arg(QT_POINTER_SIZE*8));
|
||||
ui->dspBits->setText(QString("DSP Rx %1 bits Tx %2 bits").arg(SDR_RX_SAMP_SZ).arg(SDR_TX_SAMP_SZ));
|
||||
ui->pid->setText(QString("PID: %1").arg(qApp->applicationPid()));
|
||||
QString apiUrl = QString("http://%1:%2/sdrangel").arg(apiHost).arg(apiPort);
|
||||
ui->restApiUrl->setText(QString("REST API base URL: <a href=\"%1\">%2</a>").arg(apiUrl).arg(apiUrl));
|
||||
QString apiUrl = QString("http://%1:%2/").arg(apiHost).arg(apiPort);
|
||||
ui->restApiUrl->setText(QString("REST API documentation: <a href=\"%1\">%2</a>").arg(apiUrl).arg(apiUrl));
|
||||
ui->restApiUrl->setOpenExternalLinks(true);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,4 +5,6 @@ SDRANGEL_SRC=/opt/build/sdrangel
|
|||
|
||||
${CODEGEN} generate -i api/swagger/swagger.yaml -l qt5cpp -c qt5cpp-config.json -o code/qt5
|
||||
${CODEGEN} generate -i api/swagger/swagger.yaml -l html2 -c html2-config.json -o code/html2
|
||||
cp -v code/html2/index.html ${SDRANGEL_SRC}/sdrbase/resources/
|
||||
cp -v code/html2/index.html ${SDRANGEL_SRC}/sdrbase/resources/webapi/doc/html2
|
||||
cp -av api/swagger/ ${SDRANGEL_SRC}/sdrbase/resources/webapi/doc
|
||||
find ${SDRANGEL_SRC}/sdrbase/resources/webapi/doc/swagger -name \*.yaml -exec sed -i 's/http:\/\/localhost:8081\/api\/swagger\/include/\/doc\/swagger\/include/g' {} \;
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue