90 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const models = require('../../models')
 | |
| const logger = require('../../logger')
 | |
| const config = require('../../config')
 | |
| const errors = require('../../errors')
 | |
| const shortId = require('shortid')
 | |
| const moment = require('moment')
 | |
| const querystring = require('querystring')
 | |
| 
 | |
| exports.getInfo = function getInfo (req, res, note) {
 | |
|   const body = note.content
 | |
|   const extracted = models.Note.extractMeta(body)
 | |
|   const markdown = extracted.markdown
 | |
|   const meta = models.Note.parseMeta(extracted.meta)
 | |
|   const createtime = note.createdAt
 | |
|   const updatetime = note.lastchangeAt
 | |
|   const title = models.Note.decodeTitle(note.title)
 | |
|   const data = {
 | |
|     title: meta.title || title,
 | |
|     description: meta.description || (markdown ? models.Note.generateDescription(markdown) : null),
 | |
|     viewcount: note.viewcount,
 | |
|     createtime: createtime,
 | |
|     updatetime: updatetime
 | |
|   }
 | |
|   res.set({
 | |
|     'Access-Control-Allow-Origin': '*', // allow CORS as API
 | |
|     'Access-Control-Allow-Headers': 'Range',
 | |
|     'Access-Control-Expose-Headers': 'Cache-Control, Content-Encoding, Content-Range',
 | |
|     'Cache-Control': 'private', // only cache by client
 | |
|     'X-Robots-Tag': 'noindex, nofollow' // prevent crawling
 | |
|   })
 | |
|   res.send(data)
 | |
| }
 | |
| 
 | |
| exports.createGist = function createGist (req, res, note) {
 | |
|   const data = {
 | |
|     client_id: config.github.clientID,
 | |
|     redirect_uri: config.serverURL + '/auth/github/callback/' + models.Note.encodeNoteId(note.id) + '/gist',
 | |
|     scope: 'gist',
 | |
|     state: shortId.generate()
 | |
|   }
 | |
|   const query = querystring.stringify(data)
 | |
|   res.redirect('https://github.com/login/oauth/authorize?' + query)
 | |
| }
 | |
| 
 | |
| exports.getRevision = function getRevision (req, res, note) {
 | |
|   const actionId = req.params.actionId
 | |
|   if (actionId) {
 | |
|     const time = moment(parseInt(actionId))
 | |
|     if (time.isValid()) {
 | |
|       models.Revision.getPatchedNoteRevisionByTime(note, time, function (err, content) {
 | |
|         if (err) {
 | |
|           logger.error(err)
 | |
|           return errors.errorInternalError(res)
 | |
|         }
 | |
|         if (!content) {
 | |
|           return errors.errorNotFound(res)
 | |
|         }
 | |
|         res.set({
 | |
|           'Access-Control-Allow-Origin': '*', // allow CORS as API
 | |
|           'Access-Control-Allow-Headers': 'Range',
 | |
|           'Access-Control-Expose-Headers': 'Cache-Control, Content-Encoding, Content-Range',
 | |
|           'Cache-Control': 'private', // only cache by client
 | |
|           'X-Robots-Tag': 'noindex, nofollow' // prevent crawling
 | |
|         })
 | |
|         res.send(content)
 | |
|       })
 | |
|     } else {
 | |
|       return errors.errorNotFound(res)
 | |
|     }
 | |
|   } else {
 | |
|     models.Revision.getNoteRevisions(note, function (err, data) {
 | |
|       if (err) {
 | |
|         logger.error(err)
 | |
|         return errors.errorInternalError(res)
 | |
|       }
 | |
|       const out = {
 | |
|         revision: data
 | |
|       }
 | |
|       res.set({
 | |
|         'Access-Control-Allow-Origin': '*', // allow CORS as API
 | |
|         'Access-Control-Allow-Headers': 'Range',
 | |
|         'Access-Control-Expose-Headers': 'Cache-Control, Content-Encoding, Content-Range',
 | |
|         'Cache-Control': 'private', // only cache by client
 | |
|         'X-Robots-Tag': 'noindex, nofollow' // prevent crawling
 | |
|       })
 | |
|       res.send(out)
 | |
|     })
 | |
|   }
 | |
| }
 |