Skip to content
Merged

v2.9.16 #1864

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
0d0e529
Bump json-schema from 0.2.5 to 0.4.0 in /docs
dependabot[bot] Jan 17, 2022
eed40d0
Bump is-svg from 4.2.2 to 4.3.0 in /docs
dependabot[bot] Jan 17, 2022
5edb16f
Fix failing pip installs, downgrade setuptools
jc21 Jan 17, 2022
8214322
Update certbot-dns-transip plugin
jc21 Jan 18, 2022
96e034a
Add search function for redirection
ivankristianto Jan 30, 2022
0edd873
Merge pull request #1773 from NginxProxyManager/certbot-dns-transip-u…
jc21 Jan 30, 2022
e4f0636
Merge pull request #1768 from NginxProxyManager/dependabot/npm_and_ya…
jc21 Jan 30, 2022
8e5255a
Merge pull request #1767 from NginxProxyManager/dependabot/npm_and_ya…
jc21 Jan 30, 2022
83e09ad
Update current year for footer
lug-gh Feb 5, 2022
30a9d3a
Add search feature to proxy host
ivankristianto Feb 12, 2022
181f163
Move render showEmpty into function
ivankristianto Feb 12, 2022
e141b5f
Add search feature to stream
ivankristianto Feb 12, 2022
49f350f
Add search feature to 404 hosts
ivankristianto Feb 12, 2022
078114e
Fix search query for proxy
ivankristianto Feb 12, 2022
de84d5d
Add search feature to Access Lists
ivankristianto Feb 12, 2022
29c0fcb
Add search feature to SSL Certificates
ivankristianto Feb 12, 2022
366fcf0
Fix nginx/certificates search query
ivankristianto Feb 12, 2022
d3a5a3d
Add search feature to Users
ivankristianto Feb 12, 2022
61b25e1
Add search feature to Audit Logs
ivankristianto Feb 12, 2022
8eb44c4
Add translation for search text
ivankristianto Feb 12, 2022
9a854fd
Bump follow-redirects from 1.14.7 to 1.14.8 in /docs
dependabot[bot] Feb 13, 2022
dc541b2
Merge pull request #1850 from NginxProxyManager/dependabot/npm_and_ya…
jc21 Feb 13, 2022
7281ed5
Merge pull request #1830 from lug-gh/lug-gh-patch-1
jc21 Feb 13, 2022
14b889a
Merge pull request #1822 from ivankristianto/add-search-feature-redir…
jc21 Feb 17, 2022
661f3d6
Update repo path in docs
jc21 Feb 17, 2022
59238d1
Bump version
jc21 Feb 17, 2022
1a76f4e
Merge branch 'master' into develop
jc21 Feb 17, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.9.15
2.9.16
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<p align="center">
<img src="https://nginxproxymanager.com/github.png">
<br><br>
<img src="https://img.shields.io/badge/version-2.9.15-green.svg?style=for-the-badge">
<img src="https://img.shields.io/badge/version-2.9.16-green.svg?style=for-the-badge">
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
</a>
Expand Down Expand Up @@ -517,6 +517,12 @@ Special thanks to the following contributors:
<br /><sub><b>Troy Kelly</b></sub>
</a>
</td>
<td align="center">
<a href="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/ivankristianto">
<img src="https://avatars.githubusercontent.com/u/656006?v=4" width="80" alt=""/>
<br /><sub><b>Ivan Kristianto </b></sub>
</a>
</td>
</tr>
</table>
<!-- markdownlint-enable -->
Expand Down
10 changes: 5 additions & 5 deletions backend/internal/certificate.js
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@ const internalCertificate = {
zipFiles(source, out) {
const archive = archiver('zip', { zlib: { level: 9 } });
const stream = fs.createWriteStream(out);

return new Promise((resolve, reject) => {
source
.map((fl) => {
Expand All @@ -399,7 +399,7 @@ const internalCertificate = {
archive
.on('error', (err) => reject(err))
.pipe(stream);

stream.on('close', () => resolve());
archive.finalize();
});
Expand Down Expand Up @@ -477,7 +477,7 @@ const internalCertificate = {
// Query is used for searching
if (typeof search_query === 'string') {
query.where(function () {
this.where('name', 'like', '%' + search_query + '%');
this.where('nice_name', 'like', '%' + search_query + '%');
});
}

Expand Down Expand Up @@ -1140,7 +1140,7 @@ const internalCertificate = {
if (domains.length === 0) {
throw new error.InternalValidationError('No domains provided');
}

// Create a test challenge file
const testChallengeDir = '/data/letsencrypt-acme-challenge/.well-known/acme-challenge';
const testChallengeFile = testChallengeDir + '/test-challenge';
Expand Down Expand Up @@ -1215,7 +1215,7 @@ const internalCertificate = {

// Remove the test challenge file
fs.unlinkSync(testChallengeFile);

return results;
}
};
Expand Down
5 changes: 5 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ RUN rm -rf /etc/services.d/frontend /etc/nginx/conf.d/dev.conf
# Change permission of logrotate config file
RUN chmod 644 /etc/logrotate.d/nginx-proxy-manager

# fix for pip installs
# https://github.com/NginxProxyManager/nginx-proxy-manager/issues/1769
RUN pip uninstall --yes setuptools \
&& pip install "setuptools==58.0.0"

VOLUME [ "/data", "/etc/letsencrypt" ]
ENTRYPOINT [ "/init" ]

Expand Down
2 changes: 1 addition & 1 deletion docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@
"jsbn": "^1.1.0",
"jsesc": "^3.0.1",
"json-parse-better-errors": "^1.0.2",
"json-schema": "^0.2.5",
"json-schema": "^0.4.0",
"json-schema-traverse": "^0.4.1",
"json-stringify-safe": "^5.0.1",
"json3": "^3.3.3",
Expand Down
2 changes: 1 addition & 1 deletion docs/setup/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ you don't have to worry about doing anything special and you can follow the comm

Check out the [dockerhub tags](https://hub.docker.com/r/jc21/nginx-proxy-manager/tags)
for a list of supported architectures and if you want one that doesn't exist,
[create a feature request](https://github.com/jc21/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=).
[create a feature request](https://github.com/NginxProxyManager/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=).

Also, if you don't know how to already, follow [this guide to install docker and docker-compose](https://manre-universe.net/how-to-run-docker-and-docker-compose-on-raspbian/)
on Raspbian.
Expand Down
34 changes: 23 additions & 11 deletions docs/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4117,6 +4117,13 @@ fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==

fast-xml-parser@^3.19.0:
version "3.21.1"
resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz#152a1d51d445380f7046b304672dd55d15c9e736"
integrity sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==
dependencies:
strnum "^1.0.4"

fastq@^1.6.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481"
Expand Down Expand Up @@ -4259,9 +4266,9 @@ flush-write-stream@^2.0.0:
readable-stream "^3.1.1"

follow-redirects@^1.0.0, follow-redirects@^1.12.1:
version "1.14.7"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685"
integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==
version "1.14.8"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc"
integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==

for-in@^1.0.2:
version "1.0.2"
Expand Down Expand Up @@ -5535,11 +5542,11 @@ is-svg@^3.0.0:
html-comment-regex "^1.1.0"

is-svg@^4.2.1:
version "4.2.2"
resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-4.2.2.tgz#a4ea0f3f78dada7085db88f1e85b6f845626cfae"
integrity sha512-JlA7Mc7mfWjdxxTkJ094oUK9amGD7gQaj5xA/NCY0vlVvZ1stmj4VX+bRuwOMN93IHRZ2ctpPH/0FO6DqvQ5Rw==
version "4.3.0"
resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-4.3.0.tgz#3e46a45dcdb2780e42a3c8538154d7f7bfc07216"
integrity sha512-Np3TOGLVr0J27VDaS/gVE7bT45ZcSmX4pMmMTsPjqO8JY383fuPIcWmZr3QsHVWhqhZWxSdmW+tkkl3PWOB0Nw==
dependencies:
html-comment-regex "^1.1.2"
fast-xml-parser "^3.19.0"

is-symbol@^1.0.2, is-symbol@^1.0.3:
version "1.0.3"
Expand Down Expand Up @@ -5719,10 +5726,10 @@ [email protected]:
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=

json-schema@^0.2.5:
version "0.2.5"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.5.tgz#97997f50972dd0500214e208c407efa4b5d7063b"
integrity sha512-gWJOWYFrhQ8j7pVm0EM8Slr+EPVq1Phf6lvzvD/WCeqkrx/f2xBI0xOsRRS9xCn3I4vKtP519dvs3TP09r24wQ==
json-schema@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==

json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
version "5.0.1"
Expand Down Expand Up @@ -9085,6 +9092,11 @@ strip-json-comments@~2.0.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=

strnum@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db"
integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==

stylehacks@^4.0.0, stylehacks@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
Expand Down
10 changes: 10 additions & 0 deletions frontend/js/app/audit-log/main.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@
<div class="card-status bg-teal"></div>
<div class="card-header">
<h3 class="card-title"><%- i18n('audit-log', 'title') %></h3>
<div class="card-options">
<form class="search-form" role="search">
<div class="input-icon">
<span class="input-icon-addon">
<i class="fe fe-search"></i>
</span>
<input name="source-query" type="text" value="" class="form-control form-control-sm" placeholder="<%- i18n('audit-log', 'search') %>" aria-label="<%- i18n('audit-log', 'search') %>">
</div>
</form>
</div>
</div>
<div class="card-body no-padding min-100">
<div class="dimmer active">
Expand Down
65 changes: 47 additions & 18 deletions frontend/js/app/audit-log/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,68 @@ module.exports = Mn.View.extend({

ui: {
list_region: '.list-region',
dimmer: '.dimmer'
dimmer: '.dimmer',
search: '.search-form',
query: 'input[name="source-query"]'
},

fetch: App.Api.AuditLog.getAll,

showData: function(response) {
this.showChildView('list_region', new ListView({
collection: new AuditLogModel.Collection(response)
}));
},

showError: function(err) {
this.showChildView('list_region', new ErrorView({
code: err.code,
message: err.message,
retry: function () {
App.Controller.showAuditLog();
}
}));

console.error(err);
},

showEmpty: function() {
this.showChildView('list_region', new EmptyView({
title: App.i18n('audit-log', 'empty'),
subtitle: App.i18n('audit-log', 'empty-subtitle')
}));
},

regions: {
list_region: '@ui.list_region'
},

events: {
'submit @ui.search': function (e) {
e.preventDefault();
let query = this.ui.query.val();

this.fetch(['user'], query)
.then(response => this.showData(response))
.catch(err => {
this.showError(err);
});
}
},

onRender: function () {
let view = this;

App.Api.AuditLog.getAll(['user'])
view.fetch(['user'])
.then(response => {
if (!view.isDestroyed() && response && response.length) {
view.showChildView('list_region', new ListView({
collection: new AuditLogModel.Collection(response)
}));
view.showData(response);
} else {
view.showChildView('list_region', new EmptyView({
title: App.i18n('audit-log', 'empty'),
subtitle: App.i18n('audit-log', 'empty-subtitle')
}));
view.showEmpty();
}
})
.catch(err => {
view.showChildView('list_region', new ErrorView({
code: err.code,
message: err.message,
retry: function () {
App.Controller.showAuditLog();
}
}));

console.error(err);
view.showError(err);
})
.then(() => {
view.ui.dimmer.removeClass('active');
Expand Down
8 changes: 8 additions & 0 deletions frontend/js/app/nginx/access/main.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@
<div class="card-header">
<h3 class="card-title"><%- i18n('access-lists', 'title') %></h3>
<div class="card-options">
<form class="search-form" role="search">
<div class="input-icon">
<span class="input-icon-addon">
<i class="fe fe-search"></i>
</span>
<input name="source-query" type="text" value="" class="form-control form-control-sm" placeholder="<%- i18n('access-lists', 'search') %>" aria-label="<%- i18n('access-lists', 'search') %>">
</div>
</form>
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
<% if (showAddButton) { %>
<a href="#" class="btn btn-outline-teal btn-sm ml-2 add-item"><%- i18n('access-lists', 'add') %></a>
Expand Down
79 changes: 53 additions & 26 deletions frontend/js/app/nginx/access/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,44 @@ module.exports = Mn.View.extend({
list_region: '.list-region',
add: '.add-item',
help: '.help',
dimmer: '.dimmer'
dimmer: '.dimmer',
search: '.search-form',
query: 'input[name="source-query"]'
},

fetch: App.Api.Nginx.AccessLists.getAll,

showData: function(response) {
this.showChildView('list_region', new ListView({
collection: new AccessListModel.Collection(response)
}));
},

showError: function(err) {
this.showChildView('list_region', new ErrorView({
code: err.code,
message: err.message,
retry: function () {
App.Controller.showNginxAccess();
}
}));

console.error(err);
},

showEmpty: function() {
let manage = App.Cache.User.canManage('access_lists');

this.showChildView('list_region', new EmptyView({
title: App.i18n('access-lists', 'empty'),
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
link: manage ? App.i18n('access-lists', 'add') : null,
btn_color: 'teal',
permission: 'access_lists',
action: function () {
App.Controller.showNginxAccessListForm();
}
}));
},

regions: {
Expand All @@ -30,6 +67,17 @@ module.exports = Mn.View.extend({
'click @ui.help': function (e) {
e.preventDefault();
App.Controller.showHelp(App.i18n('access-lists', 'help-title'), App.i18n('access-lists', 'help-content'));
},

'submit @ui.search': function (e) {
e.preventDefault();
let query = this.ui.query.val();

this.fetch(['owner', 'items', 'clients'], query)
.then(response => this.showData(response))
.catch(err => {
this.showError(err);
});
}
},

Expand All @@ -40,39 +88,18 @@ module.exports = Mn.View.extend({
onRender: function () {
let view = this;

App.Api.Nginx.AccessLists.getAll(['owner', 'items', 'clients'])
view.fetch(['owner', 'items', 'clients'])
.then(response => {
if (!view.isDestroyed()) {
if (response && response.length) {
view.showChildView('list_region', new ListView({
collection: new AccessListModel.Collection(response)
}));
view.showData(response);
} else {
let manage = App.Cache.User.canManage('access_lists');

view.showChildView('list_region', new EmptyView({
title: App.i18n('access-lists', 'empty'),
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
link: manage ? App.i18n('access-lists', 'add') : null,
btn_color: 'teal',
permission: 'access_lists',
action: function () {
App.Controller.showNginxAccessListForm();
}
}));
view.showEmpty();
}
}
})
.catch(err => {
view.showChildView('list_region', new ErrorView({
code: err.code,
message: err.message,
retry: function () {
App.Controller.showNginxAccess();
}
}));

console.error(err);
view.showError(err);
})
.then(() => {
view.ui.dimmer.removeClass('active');
Expand Down
Loading