mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-11-22 04:55:33 +03:00
Pull request: home: show version in install api
Closes #4026. Squashed commit of the following: commit bcd1315a10e819daee3aee323427d90a27860b4a Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Tue Jan 18 14:57:49 2022 +0300 openapi: fix example commit b56e27c5ac1fc7c3f595057d77607479d72ec50a Author: Ildar Kamalov <ik@adguard.com> Date: Tue Jan 18 14:55:51 2022 +0300 client: show version on install page commit 95dfbfaa1235deef7b55e51457d11c677f6ef6b5 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Tue Jan 18 14:29:08 2022 +0300 home: show version in install api
This commit is contained in:
parent
061136508e
commit
813a06d09a
6 changed files with 64 additions and 33 deletions
|
@ -13,6 +13,12 @@ const Version = () => {
|
|||
checkUpdateFlag,
|
||||
} = useSelector((state) => state?.dashboard ?? {}, shallowEqual);
|
||||
|
||||
const {
|
||||
dnsVersion: installDnsVersion,
|
||||
} = useSelector((state) => state?.install ?? {}, shallowEqual);
|
||||
|
||||
const version = dnsVersion || installDnsVersion;
|
||||
|
||||
const onClick = () => {
|
||||
dispatch(getVersion(true));
|
||||
};
|
||||
|
@ -20,11 +26,12 @@ const Version = () => {
|
|||
return (
|
||||
<div className="version">
|
||||
<div className="version__text">
|
||||
{dnsVersion
|
||||
&& <>
|
||||
{version && (
|
||||
<>
|
||||
<Trans>version</Trans>:
|
||||
<span className="version__value" title={dnsVersion}>{dnsVersion}</span>
|
||||
</>}
|
||||
<span className="version__value" title={version}>{version}</span>
|
||||
</>
|
||||
)}
|
||||
{checkUpdateFlag && <button
|
||||
type="button"
|
||||
className="btn btn-icon btn-icon-sm btn-outline-primary btn-sm ml-2"
|
||||
|
|
|
@ -12,13 +12,19 @@ const install = handleActions({
|
|||
[actions.getDefaultAddressesRequest]: (state) => ({ ...state, processingDefault: true }),
|
||||
[actions.getDefaultAddressesFailure]: (state) => ({ ...state, processingDefault: false }),
|
||||
[actions.getDefaultAddressesSuccess]: (state, { payload }) => {
|
||||
const { interfaces } = payload;
|
||||
const { interfaces, version } = payload;
|
||||
const web = { ...state.web, port: payload.web_port };
|
||||
const dns = { ...state.dns, port: payload.dns_port };
|
||||
|
||||
const newState = {
|
||||
...state, web, dns, interfaces, processingDefault: false,
|
||||
...state,
|
||||
web,
|
||||
dns,
|
||||
interfaces,
|
||||
processingDefault: false,
|
||||
dnsVersion: version,
|
||||
};
|
||||
|
||||
return newState;
|
||||
},
|
||||
|
||||
|
@ -64,6 +70,7 @@ const install = handleActions({
|
|||
error: '',
|
||||
},
|
||||
interfaces: {},
|
||||
dnsVersion: '',
|
||||
});
|
||||
|
||||
export default combineReducers({
|
||||
|
|
|
@ -17,6 +17,7 @@ import (
|
|||
"github.com/AdguardTeam/AdGuardHome/internal/aghalgo"
|
||||
"github.com/AdguardTeam/AdGuardHome/internal/aghhttp"
|
||||
"github.com/AdguardTeam/AdGuardHome/internal/aghnet"
|
||||
"github.com/AdguardTeam/AdGuardHome/internal/version"
|
||||
"github.com/AdguardTeam/golibs/errors"
|
||||
"github.com/AdguardTeam/golibs/log"
|
||||
)
|
||||
|
@ -24,6 +25,14 @@ import (
|
|||
// getAddrsResponse is the response for /install/get_addresses endpoint.
|
||||
type getAddrsResponse struct {
|
||||
Interfaces map[string]*aghnet.NetInterface `json:"interfaces"`
|
||||
|
||||
// Version is the version of AdGuard Home.
|
||||
//
|
||||
// TODO(a.garipov): In the new API, rename this endpoint to something more
|
||||
// general, since there will be more information here than just network
|
||||
// interfaces.
|
||||
Version string `json:"version"`
|
||||
|
||||
WebPort int `json:"web_port"`
|
||||
DNSPort int `json:"dns_port"`
|
||||
}
|
||||
|
@ -31,6 +40,8 @@ type getAddrsResponse struct {
|
|||
// handleInstallGetAddresses is the handler for /install/get_addresses endpoint.
|
||||
func (web *Web) handleInstallGetAddresses(w http.ResponseWriter, r *http.Request) {
|
||||
data := getAddrsResponse{
|
||||
Version: version.Version(),
|
||||
|
||||
WebPort: defaultPortHTTP,
|
||||
DNSPort: defaultPortDNS,
|
||||
}
|
||||
|
@ -279,10 +290,11 @@ type applyConfigReqEnt struct {
|
|||
}
|
||||
|
||||
type applyConfigReq struct {
|
||||
Web applyConfigReqEnt `json:"web"`
|
||||
DNS applyConfigReqEnt `json:"dns"`
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
|
||||
Web applyConfigReqEnt `json:"web"`
|
||||
DNS applyConfigReqEnt `json:"dns"`
|
||||
}
|
||||
|
||||
// copyInstallSettings copies the installation parameters between two
|
||||
|
@ -533,10 +545,11 @@ type applyConfigReqEntBeta struct {
|
|||
// TODO(e.burkov): This should removed with the API v1 when the appropriate
|
||||
// functionality will appear in default applyConfigReq.
|
||||
type applyConfigReqBeta struct {
|
||||
Web applyConfigReqEntBeta `json:"web"`
|
||||
DNS applyConfigReqEntBeta `json:"dns"`
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
|
||||
Web applyConfigReqEntBeta `json:"web"`
|
||||
DNS applyConfigReqEntBeta `json:"dns"`
|
||||
}
|
||||
|
||||
// handleInstallConfigureBeta is a substitution of /install/configure handler
|
||||
|
|
|
@ -62,18 +62,10 @@ func Version() (v string) {
|
|||
return version
|
||||
}
|
||||
|
||||
// Common formatting constants.
|
||||
const (
|
||||
sp = " "
|
||||
nl = "\n"
|
||||
tb = "\t"
|
||||
nltb = nl + tb
|
||||
)
|
||||
|
||||
// Constants defining the format of module information string.
|
||||
const (
|
||||
modInfoAtSep = "@"
|
||||
modInfoDevSep = sp
|
||||
modInfoDevSep = " "
|
||||
modInfoSumLeft = " (sum: "
|
||||
modInfoSumRight = ")"
|
||||
)
|
||||
|
@ -142,6 +134,7 @@ const (
|
|||
func Verbose() (v string) {
|
||||
b := &strings.Builder{}
|
||||
|
||||
const nl = "\n"
|
||||
stringutil.WriteToBuilder(
|
||||
b,
|
||||
vFmtAGHHdr,
|
||||
|
@ -178,7 +171,7 @@ func Verbose() (v string) {
|
|||
stringutil.WriteToBuilder(b, nl, vFmtDepsHdr)
|
||||
for _, dep := range info.Deps {
|
||||
if depStr := fmtModule(dep); depStr != "" {
|
||||
stringutil.WriteToBuilder(b, nltb, depStr)
|
||||
stringutil.WriteToBuilder(b, "\n\t", depStr)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,9 +2,16 @@
|
|||
|
||||
<!-- TODO(a.garipov): Reformat in accordance with the KeepAChangelog spec. -->
|
||||
|
||||
## v0.107: API changes
|
||||
## v0.107.3: API changes
|
||||
|
||||
## The new field `"cached"` in `QueryLogItem`
|
||||
### The new field `"version"` in `AddressesInfo`
|
||||
|
||||
* The new field `"version"` in `GET /install/get_addresses` is the version of
|
||||
the AdGuard Home instance.
|
||||
|
||||
## v0.107.0: API changes
|
||||
|
||||
### The new field `"cached"` in `QueryLogItem`
|
||||
|
||||
* The new field `"cached"` in `GET /control/querylog` is true if the response is
|
||||
served from cache instead of being resolved by an upstream server.
|
||||
|
|
|
@ -1264,7 +1264,7 @@
|
|||
'type': 'boolean'
|
||||
'version':
|
||||
'type': 'string'
|
||||
'example': '0.1'
|
||||
'example': 'v0.123.4'
|
||||
'language':
|
||||
'type': 'string'
|
||||
'example': 'en'
|
||||
|
@ -2221,19 +2221,23 @@
|
|||
'description': 'AdGuard Home addresses configuration'
|
||||
'required':
|
||||
- 'dns_port'
|
||||
- 'web_port'
|
||||
- 'interfaces'
|
||||
- 'version'
|
||||
- 'web_port'
|
||||
'properties':
|
||||
'dns_port':
|
||||
'type': 'integer'
|
||||
'format': 'uint16'
|
||||
'example': 53
|
||||
'interfaces':
|
||||
'$ref': '#/components/schemas/NetInterfaces'
|
||||
'version':
|
||||
'type': 'string'
|
||||
'example': 'v0.123.4'
|
||||
'web_port':
|
||||
'type': 'integer'
|
||||
'format': 'uint16'
|
||||
'example': 80
|
||||
'interfaces':
|
||||
'$ref': '#/components/schemas/NetInterfaces'
|
||||
'AddressesInfoBeta':
|
||||
'type': 'object'
|
||||
'description': 'AdGuard Home addresses configuration'
|
||||
|
|
Loading…
Reference in a new issue