diff --git a/client/admin/brewCleanup/brewCleanup.jsx b/client/admin/brewCleanup/brewCleanup.jsx
index b70fbdb..3cf13f9 100644
--- a/client/admin/brewCleanup/brewCleanup.jsx
+++ b/client/admin/brewCleanup/brewCleanup.jsx
@@ -2,13 +2,43 @@ const React = require('react');
const createClass = require('create-react-class');
const cx = require('classnames');
+const request = require('superagent');
+
const BrewCleanup = createClass({
displayName : 'BrewCleanup',
getDefaultProps(){
return {
+ adminKey : '',
};
},
+ getInitialState() {
+ return {
+ count : 0,
+
+ pending : false,
+ primed : false
+ };
+ },
+ prime(){
+ if(this.state.primed) return this.cleanup();
+ this.setState({ pending: true });
+
+ request.get('/admin/cleanup')
+ .query({ admin_key: this.props.adminKey })
+ .then((res)=> this.setState({count : res.body.count }))
+ .catch((err)=>this.setState({ error : err }))
+ .finally(()=>this.setState({ pending : false }))
+ },
+ cleanup(){
+ this.setState({ pending: true });
+
+ request.post('/admin/cleanup')
+ .query({ admin_key: this.props.adminKey })
+ .then((res)=> this.setState({count : res.body.count }))
+ .catch((err)=>this.setState({ error : err }))
+ .finally(()=>this.setState({ pending : false, primed : false }))
+ },
render(){
return
BrewCleanup Component Ready.
diff --git a/client/admin/brewLookup/brewLookup.jsx b/client/admin/brewLookup/brewLookup.jsx
index 80016b5..e9cac75 100644
--- a/client/admin/brewLookup/brewLookup.jsx
+++ b/client/admin/brewLookup/brewLookup.jsx
@@ -1,6 +1,5 @@
const React = require('react');
const createClass = require('create-react-class');
-const _ = require('lodash');
const cx = require('classnames');
const request = require('superagent');
@@ -21,7 +20,6 @@ const BrewLookup = createClass({
error : null
};
},
-
handleChange(e){
this.setState({ query : e.target.value });
},
@@ -29,7 +27,7 @@ const BrewLookup = createClass({
this.setState({ searching: true, error: null });
request.get(`/admin/lookup/${this.state.query}`)
- .query({ admin_key: this.props.adminKey })
+ //.query({ admin_key: this.props.adminKey })
.then((res)=> this.setState({foundBrew : res.body}))
.catch((err)=>this.setState({ error : err }))
.finally(()=>this.setState({ searching : false }))
@@ -72,7 +70,7 @@ const BrewLookup = createClass({
{this.state.error
- &&
{this.state.error}
+ &&
{this.state.error.toString()}
}
{this.state.foundBrew
diff --git a/package-lock.json b/package-lock.json
index b59a4a0..c8f1adc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1066,14 +1066,6 @@
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz",
"integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w=="
},
- "basic-auth": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz",
- "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=",
- "requires": {
- "safe-buffer": "5.1.1"
- }
- },
"bcrypt-pbkdf": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
diff --git a/package.json b/package.json
index 088a5ef..906d6b4 100644
--- a/package.json
+++ b/package.json
@@ -38,7 +38,6 @@
"dependencies": {
"babel-preset-env": "^1.1.8",
"babel-preset-react": "^6.24.1",
- "basic-auth": "^2.0.0",
"body-parser": "^1.14.2",
"classnames": "^2.2.0",
"codemirror": "^5.22.0",
diff --git a/server/admin.api.js b/server/admin.api.js
index 40798f4..a2c07ee 100644
--- a/server/admin.api.js
+++ b/server/admin.api.js
@@ -1,97 +1,88 @@
-const _ = require('lodash');
-const auth = require('basic-auth');
+//const auth = require('basic-auth');
const HomebrewModel = require('./homebrew.model.js').model;
const router = require('express').Router();
+const Moment = require('moment');
+const render = require('vitreum/steps/render');
+const templateFn = require('../client/template.js');
+process.env.ADMIN_USER = process.env.ADMIN_USER || 'admin';
+process.env.ADMIN_PASS = process.env.ADMIN_PASS || 'password3';
+//process.env.ADMIN_KEY = process.env.ADMIN_KEY || 'admin_key';
+
+//FIXME: remove this whole 'ADMIN_KEY' buulshit
+
const mw = {
adminOnly : (req, res, next)=>{
- if(req.query && req.query.admin_key == process.env.ADMIN_KEY) return next();
+ if(!req.get('authorization')){
+ return res
+ .set('WWW-Authenticate', 'Basic realm="Authorization Required"')
+ .status(401)
+ .send('Authorization Required');
+ }
+ const [username, password] = new Buffer(req.get('authorization').split(' ').pop(), 'base64')
+ .toString('ascii')
+ .split(':');
+ if(process.env.ADMIN_USER === username && process.env.ADMIN_PASS === password){
+ return next();
+ }
return res.status(401).send('Access denied');
}
};
-process.env.ADMIN_USER = process.env.ADMIN_USER || 'admin';
-process.env.ADMIN_PASS = process.env.ADMIN_PASS || 'password';
-process.env.ADMIN_KEY = process.env.ADMIN_KEY || 'admin_key';
-
-
/* Removes all empty brews that are older than 3 days and that are shorter than a tweet */
-router.get('/admin/clear_invalid', mw.adminOnly, (req, res)=>{
- const invalidBrewQuery = HomebrewModel.find({
- '$where' : 'this.text.length < 140',
- createdAt : {
- $lt : Moment().subtract(3, 'days').toDate()
- }
- });
-
- if(req.query.do_it){
- invalidBrewQuery.remove().exec((err, objs)=>{
- if(err) return res.status(500).send(err);
- return res.send(200);
- });
- } else {
- invalidBrewQuery.exec((err, objs)=>{
- if(err) return res.status(500).send(err);
- return res.json({
- count : objs.length
- });
- });
+const junkBrewQuery = HomebrewModel.find({
+ '$where' : 'this.text.length < 140',
+ createdAt : {
+ $lt : Moment().subtract(3, 'days').toDate()
}
});
+router.get('/admin/cleanup', mw.adminOnly, (req, res)=>{
+ junkBrewQuery.exec((err, objs)=>{
+ if(err) return res.status(500).send(err);
+ return res.json({ count : objs.length });
+ });
+});
+/* Removes all empty brews that are older than 3 days and that are shorter than a tweet */
+router.post('/admin/cleanup', mw.adminOnly, (req, res)=>{
+ junkBrewQuery.remove().exec((err, objs)=>{
+ if(err) return res.status(500).send(err);
+ return res.json({ count : objs.length });
+ });
+})
/* Searches for matching edit or share id, also attempts to partial match */
router.get('/admin/lookup/:id', mw.adminOnly, (req, res, next)=>{
-
- console.log('lookup');
-
-
HomebrewModel.findOne({ $or : [
- { editId: { '$regex': req.params.id, '$options': 'i' } },
+ { editId: { '$regex': req.params.id, '$options': 'i' } },
{ shareId: { '$regex': req.params.id, '$options': 'i' } },
- ] }).exec((err, brew)=>{
+ ]}).exec((err, brew)=>{
return res.json(brew);
});
});
-router.get('/admin/stats', mw.adminOnly, (req, res)=>{
- console.log('hittting stats');
+router.get('/admin/stats', mw.adminOnly, (req, res)=>{
HomebrewModel.count({}, (err, count)=>{
return res.json({
totalBrews : count
})
})
-
});
-
-
-//Admin route
-
-const render = require('vitreum/steps/render');
-const templateFn = require('../client/template.js');
-router.get('/admin', function(req, res){
- const credentials = auth(req);
- if(!credentials || credentials.name !== process.env.ADMIN_USER || credentials.pass !== process.env.ADMIN_PASS) {
- res.setHeader('WWW-Authenticate', 'Basic realm="example"');
- return res.status(401).send('Access denied');
- }
+router.get('/admin', mw.adminOnly, (req, res)=>{
+ // const credentials = auth(req);
+ // if(!credentials || credentials.name !== process.env.ADMIN_USER || credentials.pass !== process.env.ADMIN_PASS) {
+ // res.setHeader('WWW-Authenticate', 'Basic realm="example"');
+ // return res.status(401).send('Access denied');
+ // }
render('admin', templateFn, {
url : req.originalUrl,
adminKey : process.env.ADMIN_KEY
})
- .then((page)=>{
- return res.send(page);
- })
- .catch((err)=>{
- console.log(err);
- return res.sendStatus(500);
- });
+ .then((page)=>res.send(page))
+ .catch((err)=>res.sendStatus(500))
});
-
-
-
module.exports = router;
\ No newline at end of file