mirror of
https://github.com/stolksdorf/homebrewery.git
synced 2025-12-22 20:21:29 +00:00
Added a brew lookup for admin page
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
### Thursday, 19/01/2017 - v2.7.0
|
### Thursday, 19/01/2017 - v2.7.0
|
||||||
- Fixed saving multiple authors and multiple systems on brew metadata (thanks u/PalaNolho re:282)
|
- Fixed saving multiple authors and multiple systems on brew metadata (thanks u/PalaNolho re:282)
|
||||||
- Adding in line highlight for new pages
|
- Adding in line highlight for new pages
|
||||||
|
- Added in a simple brew lookup for admin
|
||||||
|
|
||||||
|
|
||||||
### Saturday, 14/01/2017 - v2.7.0
|
### Saturday, 14/01/2017 - v2.7.0
|
||||||
|
|||||||
@@ -27,8 +27,6 @@ var Admin = React.createClass({
|
|||||||
|
|
||||||
<div className='container'>
|
<div className='container'>
|
||||||
|
|
||||||
<a target="_blank" href='https://www.google.com/analytics/web/?hl=en#report/defaultid/a72212009w109843310p114529111/'>Link to Google Analytics</a>
|
|
||||||
|
|
||||||
<HomebrewAdmin homebrews={this.props.homebrews} admin_key={this.props.admin_key} />
|
<HomebrewAdmin homebrews={this.props.homebrews} admin_key={this.props.admin_key} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
67
client/admin/homebrewAdmin/brewLookup/brewLookup.jsx
Normal file
67
client/admin/homebrewAdmin/brewLookup/brewLookup.jsx
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
const React = require('react');
|
||||||
|
const _ = require('lodash');
|
||||||
|
const cx = require('classnames');
|
||||||
|
|
||||||
|
const request = require('superagent');
|
||||||
|
const Moment = require('moment');
|
||||||
|
|
||||||
|
|
||||||
|
const BrewLookup = React.createClass({
|
||||||
|
getDefaultProps: function() {
|
||||||
|
return {
|
||||||
|
adminKey : '',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getInitialState: function() {
|
||||||
|
return {
|
||||||
|
query:'',
|
||||||
|
resultBrew : null,
|
||||||
|
searching : false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
handleChange : function(e){
|
||||||
|
this.setState({
|
||||||
|
query : e.target.value
|
||||||
|
})
|
||||||
|
},
|
||||||
|
lookup : function(){
|
||||||
|
this.setState({ searching : true });
|
||||||
|
|
||||||
|
request.get(`/admin/lookup/${this.state.query}`)
|
||||||
|
.query({ admin_key : this.props.adminKey })
|
||||||
|
.end((err, res) => {
|
||||||
|
this.setState({
|
||||||
|
searching : false,
|
||||||
|
resultBrew : (err ? null : res.body)
|
||||||
|
});
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
renderFoundBrew : function(){
|
||||||
|
if(this.state.searching) return <div className='searching'><i className='fa fa-spin fa-spinner' /></div>;
|
||||||
|
if(!this.state.resultBrew) return <div className='noBrew'>No brew found.</div>;
|
||||||
|
|
||||||
|
const brew = this.state.resultBrew;
|
||||||
|
return <div className='brewRow'>
|
||||||
|
<div>{brew.title}</div>
|
||||||
|
<div>{brew.authors.join(', ')}</div>
|
||||||
|
<div><a href={'/edit/' + brew.editId} target='_blank'>/edit/{brew.editId}</a></div>
|
||||||
|
<div><a href={'/share/' + brew.shareId} target='_blank'>/share/{brew.shareId}</a></div>
|
||||||
|
<div>{Moment(brew.updatedAt).fromNow()}</div>
|
||||||
|
<div>{brew.views}</div>
|
||||||
|
</div>
|
||||||
|
},
|
||||||
|
|
||||||
|
render: function(){
|
||||||
|
return <div className='brewLookup'>
|
||||||
|
<h1>Brew Lookup</h1>
|
||||||
|
<input type='text' value={this.state.query} onChange={this.handleChange} placeholder='edit or share id...' />
|
||||||
|
<button onClick={this.lookup}><i className='fa fa-search'/></button>
|
||||||
|
|
||||||
|
{this.renderFoundBrew()}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = BrewLookup;
|
||||||
8
client/admin/homebrewAdmin/brewLookup/brewLookup.less
Normal file
8
client/admin/homebrewAdmin/brewLookup/brewLookup.less
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
.brewLookup{
|
||||||
|
height : 200px;
|
||||||
|
input{
|
||||||
|
height : 33px;
|
||||||
|
padding : 0px 10px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,8 @@ var Moment = require('moment');
|
|||||||
|
|
||||||
var BrewSearch = require('./brewSearch.jsx');
|
var BrewSearch = require('./brewSearch.jsx');
|
||||||
|
|
||||||
|
var BrewLookup = require('./brewLookup/brewLookup.jsx');
|
||||||
|
|
||||||
|
|
||||||
var HomebrewAdmin = React.createClass({
|
var HomebrewAdmin = React.createClass({
|
||||||
getDefaultProps: function() {
|
getDefaultProps: function() {
|
||||||
@@ -35,6 +37,7 @@ var HomebrewAdmin = React.createClass({
|
|||||||
page : page
|
page : page
|
||||||
})
|
})
|
||||||
.end((err, res)=>{
|
.end((err, res)=>{
|
||||||
|
if(err || !res.body || !res.body.brews) return;
|
||||||
this.state.brewCache[page] = res.body.brews;
|
this.state.brewCache[page] = res.body.brews;
|
||||||
this.setState({
|
this.setState({
|
||||||
brewCache : this.state.brewCache,
|
brewCache : this.state.brewCache,
|
||||||
@@ -141,9 +144,18 @@ var HomebrewAdmin = React.createClass({
|
|||||||
render : function(){
|
render : function(){
|
||||||
var self = this;
|
var self = this;
|
||||||
return <div className='homebrewAdmin'>
|
return <div className='homebrewAdmin'>
|
||||||
|
|
||||||
|
<BrewLookup adminKey={this.props.admin_key} />
|
||||||
|
|
||||||
|
{/*
|
||||||
<h2>
|
<h2>
|
||||||
Homebrews - {this.state.total}
|
Homebrews - {this.state.total}
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{this.renderPagnination()}
|
{this.renderPagnination()}
|
||||||
{this.renderBrewTable()}
|
{this.renderBrewTable()}
|
||||||
|
|
||||||
@@ -152,6 +164,7 @@ var HomebrewAdmin = React.createClass({
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
<BrewSearch admin_key={this.props.admin_key} />
|
<BrewSearch admin_key={this.props.admin_key} />
|
||||||
|
*/}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -10,8 +10,12 @@ const livereload = require('vitreum/steps/livereload.js').partial;
|
|||||||
const Proj = require('./project.json');
|
const Proj = require('./project.json');
|
||||||
|
|
||||||
Promise.resolve()
|
Promise.resolve()
|
||||||
.then(jsx('homebrew', './client/homebrew/homebrew.jsx', Proj.libs, 'shared'))
|
.then(jsx('homebrew', './client/homebrew/homebrew.jsx', Proj.libs, './shared'))
|
||||||
.then(less('homebrew', './shared'))
|
.then(less('homebrew', './shared'))
|
||||||
|
|
||||||
|
.then(jsx('admin', './client/admin/admin.jsx', Proj.libs, './shared'))
|
||||||
|
.then(less('admin', './shared'))
|
||||||
|
|
||||||
.then(assets(Proj.assets, ['./shared', './client']))
|
.then(assets(Proj.assets, ['./shared', './client']))
|
||||||
.then(livereload())
|
.then(livereload())
|
||||||
.then(server('./server.js', ['server']))
|
.then(server('./server.js', ['server']))
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ const jwt = require('jwt-simple');
|
|||||||
const express = require("express");
|
const express = require("express");
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
app.use(express.static(__dirname + '/build'));
|
app.use(express.static(__dirname + '/build'));''
|
||||||
app.use(require('body-parser').json({limit: '25mb'}));
|
app.use(require('body-parser').json({limit: '25mb'}));
|
||||||
app.use(require('cookie-parser')());
|
app.use(require('cookie-parser')());
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ app.use((req, res, next) => {
|
|||||||
|
|
||||||
|
|
||||||
app.use(require('./server/homebrew.api.js'));
|
app.use(require('./server/homebrew.api.js'));
|
||||||
//app.use(require('./server/admin.api.js'));
|
app.use(require('./server/admin.api.js'));
|
||||||
|
|
||||||
|
|
||||||
const HomebrewModel = require('./server/homebrew.model.js').model;
|
const HomebrewModel = require('./server/homebrew.model.js').model;
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ const _ = require('lodash');
|
|||||||
const auth = require('basic-auth');
|
const auth = require('basic-auth');
|
||||||
const HomebrewModel = require('./homebrew.model.js').model;
|
const HomebrewModel = require('./homebrew.model.js').model;
|
||||||
const router = require('express').Router();
|
const router = require('express').Router();
|
||||||
const vitreumRender = require('vitreum/render');
|
|
||||||
|
|
||||||
|
|
||||||
const mw = {
|
const mw = {
|
||||||
@@ -42,27 +41,41 @@ router.get('/api/invalid', mw.adminOnly, (req, res)=>{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.get('/admin/lookup/:id', mw.adminOnly, (req, res, next) => {
|
||||||
|
//search for mathcing edit id
|
||||||
|
//search for matching share id
|
||||||
|
// search for partial match
|
||||||
|
|
||||||
|
HomebrewModel.findOne({ $or:[
|
||||||
|
{editId : { "$regex": req.params.id, "$options": "i" }},
|
||||||
|
{shareId : { "$regex": req.params.id, "$options": "i" }},
|
||||||
|
]}).exec((err, brew) => {
|
||||||
|
return res.json(brew);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Admin route
|
//Admin route
|
||||||
|
|
||||||
|
const render = require('vitreum/steps/render');
|
||||||
|
const templateFn = require('../client/template.js');
|
||||||
router.get('/admin', function(req, res){
|
router.get('/admin', function(req, res){
|
||||||
const credentials = auth(req)
|
const credentials = auth(req)
|
||||||
if (!credentials || credentials.name !== process.env.ADMIN_USER || credentials.pass !== process.env.ADMIN_PASS) {
|
if (!credentials || credentials.name !== process.env.ADMIN_USER || credentials.pass !== process.env.ADMIN_PASS) {
|
||||||
res.setHeader('WWW-Authenticate', 'Basic realm="example"')
|
res.setHeader('WWW-Authenticate', 'Basic realm="example"')
|
||||||
return res.status(401).send('Access denied')
|
return res.status(401).send('Access denied')
|
||||||
}
|
}
|
||||||
vitreumRender({
|
render('admin', templateFn, {
|
||||||
page: './build/admin/bundle.dot',
|
|
||||||
prerenderWith : './client/admin/admin.jsx',
|
|
||||||
clearRequireCache : !process.env.PRODUCTION,
|
|
||||||
initialProps: {
|
|
||||||
url: req.originalUrl,
|
url: req.originalUrl,
|
||||||
admin_key : process.env.ADMIN_KEY,
|
admin_key : process.env.ADMIN_KEY,
|
||||||
},
|
})
|
||||||
}, function (err, page) {
|
.then((page) => {
|
||||||
return res.send(page)
|
return res.send(page)
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(err);
|
||||||
|
return res.sendStatus(500);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user