Browse Source

Initial commit

master
jrtechs 5 years ago
commit
6ae865cf83
5 changed files with 198 additions and 0 deletions
  1. +7
    -0
      README.md
  2. +6
    -0
      config.json
  3. +70
    -0
      index.html
  4. +95
    -0
      server.js
  5. +20
    -0
      utils.js

+ 7
- 0
README.md View File

@ -0,0 +1,7 @@
```bash
npm install fs --save
npm install unirest --save
npm install express --save
npm install passport --save
npm install passport-fitbit-oauth2 --save
```

+ 6
- 0
config.json View File

@ -0,0 +1,6 @@
{
"port": 9000,
"clientID": "fit bit client id",
"clientSecret": "super secret",
"callbackURL": "https://jrtechs.student.rit.edu/auth/fitbit/callback"
}

+ 70
- 0
index.html View File

@ -0,0 +1,70 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<div class="row">
<div class="col col-md-6 col-12">
<script type='text/javascript' src='https://darksky.net/widget/graph-bar/43.1573,-77.6152/us12/en.js?width=100%&height=400&title=Full Forecast&textColor=333333&bgColor=transparent&transparency=true&skyColor=undefined&fontFamily=Default&customFont=&units=us&timeColor=333333&tempColor=333333&currentDetailsOption=true'></script>
<script type='text/javascript' src='https://darksky.net/widget/default/43.1573,-77.6152/us12/en.js?width=100%&height=350&title=Rochester NY&textColor=333333&bgColor=transparent&transparency=true&skyColor=undefined&fontFamily=Default&customFont=&units=us&htColor=333333&ltColor=C7C7C7&displaySum=yes&displayHeader=yes'></script>
</div>
<div class="col col-md-6 col-12">
<!-- start sw-rss-feed code -->
<script type="text/javascript">
rssfeed_url = new Array();
rssfeed_url[0]="https://news.google.com/news/rss";
rssfeed_frame_width="100%";
rssfeed_frame_height="260";
rssfeed_scroll="off";
rssfeed_scroll_step="20";
rssfeed_scroll_bar="on";
rssfeed_target="_blank";
rssfeed_font_size="12";
rssfeed_font_face="";
rssfeed_border="on";
rssfeed_css_url="";
rssfeed_title="on";
rssfeed_title_name="";
rssfeed_title_bgcolor="#3366ff";
rssfeed_title_color="#fff";
rssfeed_title_bgimage="";
rssfeed_footer="off";
rssfeed_footer_name="rss feed";
rssfeed_footer_bgcolor="#fff";
rssfeed_footer_color="#333";
rssfeed_footer_bgimage="";
rssfeed_item_title_length="50";
rssfeed_item_title_color="#666";
rssfeed_item_bgcolor="#fff";
rssfeed_item_bgimage="";
rssfeed_item_border_bottom="on";
rssfeed_item_source_icon="off";
rssfeed_item_date="off";
rssfeed_item_description="on";
rssfeed_item_description_length="120";
rssfeed_item_description_color="#666";
rssfeed_item_description_link_color="#333";
rssfeed_item_description_tag="off";
rssfeed_no_items="0";
rssfeed_cache = "2220318b43254a73f6fcdb3732f0e710";
</script>
<script type="text/javascript" src="//feed.surfing-waves.com/js/rss-feed.js"></script>
<!-- The link below helps keep this service FREE, and helps other people find the SW widget. Please be cool and keep it! Thanks. -->
<div style="color:#ccc;font-size:10px; text-align:right; width:100%;">powered by <a href="https://surfing-waves.com" rel="noopener" target="_blank" style="color:#ccc;">Surfing Waves</a></div>
<!-- end sw-rss-feed code -->
</div>
</div>
</body>
</html>

+ 95
- 0
server.js View File

@ -0,0 +1,95 @@
/** express app */
const express = require("express");
/** Manages oauth 2.0 w/ fitbit */
const passport = require('passport');
/** Used to make API calls */
const unirest = require('unirest');
/** express app */
const app = express();
/** pull config file */
const utils = require("./utils.js");
const config = utils.getFileAsJSON("config.json");
app.use(passport.initialize());
app.use(passport.session({
resave: false,
saveUninitialized: true
}));
var FitbitStrategy = require( 'passport-fitbit-oauth2' ).FitbitOAuth2Strategy;
var accessTokenTemp = null;
passport.use(new FitbitStrategy({
clientID: config.clientID,
clientSecret: config.clientSecret,
callbackURL: config.callbackURL
},
function(accessToken, refreshToken, profile, done)
{
console.log(accessToken);
accessTokenTemp = accessToken;
done(null, {
accessToken: accessToken,
refreshToken: refreshToken,
profile: profile
});
}
));
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
passport.authenticate('fitbit', { scope: ['activity','heartrate','location','profile'] });
app.get('/auth/fitbit',
passport.authenticate('fitbit', { scope: ['activity','heartrate','location','profile'] }
));
app.get( '/auth/fitbit/callback', passport.authenticate( 'fitbit', {
successRedirect: '/',
failureRedirect: '/error'
}));
app.get('/error', (request, result) =>
{
result.write("Error authenticating with Fitbit API");
result.end();
});
app.get('/', (request, result) =>
{
if(accessTokenTemp == null)
{
result.redirect('/auth/fitbit');
}
unirest.get('https://api.fitbit.com/1/user/-/activities/steps/date/today/1m.json')
.headers({'Accept': 'application/json', 'Content-Type': 'application/json', Authorization: "Bearer " + accessTokenTemp})
.end(function (response)
{
// result.write(response.body);
result.end();
console.log(response.body);
});
});
app.listen(PORT, () =>
console.log(`App listening on port ${config.port}!`)
);

+ 20
- 0
utils.js View File

@ -0,0 +1,20 @@
const fs = require('fs');
module.exports=
{
/**
*
* @param fileName
* @returns {any}
*/
getFileAsJSON: function(fileName)
{
return JSON.parse(module.exports.getFile(fileName));
},
getFile: function(filename)
{
return fs.readFileSync(filename, 'utf8');
}
};

Loading…
Cancel
Save