Added node dtdns updater
This commit is contained in:
@@ -10,4 +10,67 @@
|
|||||||
* SPI SCK SCK 13 / ICSP-3
|
* SPI SCK SCK 13 / ICSP-3
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <MFRC522.h>
|
||||||
|
|
||||||
|
#define SS_PIN 10
|
||||||
|
#define RST_PIN 9
|
||||||
|
#define READ_MODE_LED A0
|
||||||
|
#define WRITE_MODE_LED A4
|
||||||
|
#define READ_MODE_BUTTON 7
|
||||||
|
#define WRITE_MODE_BUTTON 6
|
||||||
|
|
||||||
|
int mode = 0; //0 read, 1 write
|
||||||
|
int buttonStateRead = 0;
|
||||||
|
int buttonStateWrite = 0;
|
||||||
|
|
||||||
|
MFRC522 rfid(SS_PIN, RST_PIN);
|
||||||
|
|
||||||
|
MFRC522::MIFARE_Key key;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(9600);
|
||||||
|
SPI.begin();
|
||||||
|
rfid.PCD_Init();
|
||||||
|
pinMode(READ_MODE_LED, OUTPUT);
|
||||||
|
pinMode(WRITE_MODE_LED, OUTPUT);
|
||||||
|
pinMode(READ_MODE_BUTTON, INPUT);
|
||||||
|
pinMode(WRITE_MODE_BUTTON, INPUT);
|
||||||
|
|
||||||
|
digitalWrite(READ_MODE_LED, HIGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
|
||||||
|
|
||||||
|
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.print(F("PICC type: "));
|
||||||
|
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
|
||||||
|
Serial.println(rfid.PICC_GetTypeName(piccType));
|
||||||
|
|
||||||
|
// Check is the PICC of Classic MIFARE type
|
||||||
|
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
|
||||||
|
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
|
||||||
|
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
|
||||||
|
Serial.println(F("Your tag is not of type MIFARE Classic."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String strID = "";
|
||||||
|
for (byte i = 0; i < 4; i++) {
|
||||||
|
strID +=
|
||||||
|
(rfid.uid.uidByte[i] < 0x10 ? "0" : "") +
|
||||||
|
String(rfid.uid.uidByte[i], HEX) +
|
||||||
|
(i!=3 ? ":" : "");
|
||||||
|
}
|
||||||
|
strID.toUpperCase();
|
||||||
|
|
||||||
|
Serial.print("Tap card key: ");
|
||||||
|
Serial.println(strID);
|
||||||
|
|
||||||
|
rfid.PICC_HaltA();
|
||||||
|
rfid.PCD_StopCrypto1();
|
||||||
|
}
|
||||||
|
|||||||
160
NodeJS/node-dtdns-updater/.eslintrc.json
Normal file
160
NodeJS/node-dtdns-updater/.eslintrc.json
Normal file
@@ -0,0 +1,160 @@
|
|||||||
|
{
|
||||||
|
"extends": "eslint:recommended",
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaVersion": 2017
|
||||||
|
},
|
||||||
|
"env": {
|
||||||
|
"es6": true,
|
||||||
|
"node": true
|
||||||
|
},
|
||||||
|
"globals": {
|
||||||
|
"Exception": true
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{ "files": ["*.browser.js"], "env": { "browser": true } }
|
||||||
|
],
|
||||||
|
"rules": {
|
||||||
|
"no-console": "warn",
|
||||||
|
"no-await-in-loop": "warn",
|
||||||
|
"no-compare-neg-zero": "error",
|
||||||
|
"no-extra-parens": ["warn", "all", {
|
||||||
|
"nestedBinaryExpressions": false
|
||||||
|
}],
|
||||||
|
"no-template-curly-in-string": "error",
|
||||||
|
"no-unsafe-negation": "error",
|
||||||
|
"valid-jsdoc": ["error", {
|
||||||
|
"requireReturn": false,
|
||||||
|
"requireReturnDescription": false,
|
||||||
|
"prefer": {
|
||||||
|
"return": "returns",
|
||||||
|
"arg": "param"
|
||||||
|
},
|
||||||
|
"preferType": {
|
||||||
|
"String": "string",
|
||||||
|
"Number": "number",
|
||||||
|
"Boolean": "boolean",
|
||||||
|
"Symbol": "symbol",
|
||||||
|
"object": "Object",
|
||||||
|
"function": "Function",
|
||||||
|
"array": "Array",
|
||||||
|
"date": "Date",
|
||||||
|
"error": "Error",
|
||||||
|
"null": "void"
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
|
||||||
|
"accessor-pairs": "warn",
|
||||||
|
"array-callback-return": "error",
|
||||||
|
"complexity": "warn",
|
||||||
|
"consistent-return": "error",
|
||||||
|
"curly": ["error", "multi-line", "consistent"],
|
||||||
|
"dot-location": ["error", "property"],
|
||||||
|
"dot-notation": "error",
|
||||||
|
"eqeqeq": "error",
|
||||||
|
"no-empty-function": "error",
|
||||||
|
"no-floating-decimal": "error",
|
||||||
|
"no-implied-eval": "error",
|
||||||
|
"no-invalid-this": "error",
|
||||||
|
"no-lone-blocks": "error",
|
||||||
|
"no-multi-spaces": "error",
|
||||||
|
"no-new-func": "error",
|
||||||
|
"no-new-wrappers": "error",
|
||||||
|
"no-new": "error",
|
||||||
|
"no-octal-escape": "error",
|
||||||
|
"no-return-assign": "error",
|
||||||
|
"no-return-await": "error",
|
||||||
|
"no-self-compare": "error",
|
||||||
|
"no-sequences": "error",
|
||||||
|
"no-throw-literal": "error",
|
||||||
|
"no-unmodified-loop-condition": "error",
|
||||||
|
"no-unused-expressions": "error",
|
||||||
|
"no-useless-call": "error",
|
||||||
|
"no-useless-concat": "off",
|
||||||
|
"no-useless-escape": "error",
|
||||||
|
"no-useless-return": "error",
|
||||||
|
"no-void": "error",
|
||||||
|
"no-warning-comments": "warn",
|
||||||
|
"prefer-promise-reject-errors": "error",
|
||||||
|
"require-await": "warn",
|
||||||
|
"wrap-iife": "error",
|
||||||
|
"yoda": "error",
|
||||||
|
|
||||||
|
"no-label-var": "error",
|
||||||
|
"no-shadow": "error",
|
||||||
|
"no-undef-init": "error",
|
||||||
|
|
||||||
|
"callback-return": "error",
|
||||||
|
"handle-callback-err": "error",
|
||||||
|
"no-mixed-requires": "error",
|
||||||
|
"no-new-require": "error",
|
||||||
|
"no-path-concat": "error",
|
||||||
|
|
||||||
|
"array-bracket-spacing": "error",
|
||||||
|
"block-spacing": "error",
|
||||||
|
"brace-style": ["error", "stroustrup", { "allowSingleLine": true }],
|
||||||
|
"comma-dangle": ["error", "always-multiline"],
|
||||||
|
"comma-spacing": "error",
|
||||||
|
"comma-style": "error",
|
||||||
|
"computed-property-spacing": "error",
|
||||||
|
"consistent-this": ["error", "$this"],
|
||||||
|
"eol-last": "error",
|
||||||
|
"func-names": "error",
|
||||||
|
"func-name-matching": "error",
|
||||||
|
"func-style": ["error", "declaration", { "allowArrowFunctions": true }],
|
||||||
|
"indent": ["error", 2, { "SwitchCase": 1 }],
|
||||||
|
"key-spacing": "error",
|
||||||
|
"keyword-spacing": "error",
|
||||||
|
"max-depth": "error",
|
||||||
|
"max-len": ["warn", 160, 2],
|
||||||
|
"max-nested-callbacks": ["warn", { "max": 4 }],
|
||||||
|
"max-statements-per-line": ["error", { "max": 2 }],
|
||||||
|
"new-cap": "off",
|
||||||
|
"newline-per-chained-call": ["error", { "ignoreChainWithDepth": 3 }],
|
||||||
|
"no-array-constructor": "error",
|
||||||
|
"no-inline-comments": "error",
|
||||||
|
"no-lonely-if": "error",
|
||||||
|
"no-mixed-operators": "error",
|
||||||
|
"no-multiple-empty-lines": ["error", { "max": 2, "maxEOF": 1, "maxBOF": 0 }],
|
||||||
|
"no-new-object": "error",
|
||||||
|
"no-spaced-func": "error",
|
||||||
|
"no-trailing-spaces": "error",
|
||||||
|
"no-unneeded-ternary": "error",
|
||||||
|
"no-whitespace-before-property": "error",
|
||||||
|
"nonblock-statement-body-position": "error",
|
||||||
|
"object-curly-spacing": ["error", "always"],
|
||||||
|
"operator-assignment": "error",
|
||||||
|
"operator-linebreak": ["error", "after"],
|
||||||
|
"padded-blocks": ["error", "never"],
|
||||||
|
"quote-props": ["error", "as-needed"],
|
||||||
|
"quotes": ["error", "single", { "avoidEscape": true, "allowTemplateLiterals": true }],
|
||||||
|
"semi-spacing": "error",
|
||||||
|
"semi": "error",
|
||||||
|
"space-before-blocks": "error",
|
||||||
|
"space-before-function-paren": ["error", {
|
||||||
|
"anonymous": "never",
|
||||||
|
"named": "never",
|
||||||
|
"asyncArrow": "always"
|
||||||
|
}],
|
||||||
|
"space-in-parens": "error",
|
||||||
|
"space-infix-ops": "error",
|
||||||
|
"space-unary-ops": "error",
|
||||||
|
"spaced-comment": "error",
|
||||||
|
"template-tag-spacing": "error",
|
||||||
|
"unicode-bom": "error",
|
||||||
|
|
||||||
|
"arrow-body-style": "error",
|
||||||
|
"arrow-parens": ["error", "as-needed"],
|
||||||
|
"arrow-spacing": "error",
|
||||||
|
"no-duplicate-imports": "error",
|
||||||
|
"no-useless-computed-key": "error",
|
||||||
|
"no-useless-constructor": "error",
|
||||||
|
"prefer-arrow-callback": "error",
|
||||||
|
"prefer-numeric-literals": "error",
|
||||||
|
"prefer-rest-params": "error",
|
||||||
|
"prefer-spread": "error",
|
||||||
|
"prefer-template": "error",
|
||||||
|
"rest-spread-spacing": "error",
|
||||||
|
"template-curly-spacing": "error",
|
||||||
|
"yield-star-spacing": "error"
|
||||||
|
}
|
||||||
|
}
|
||||||
2
NodeJS/node-dtdns-updater/.gitignore
vendored
Normal file
2
NodeJS/node-dtdns-updater/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/node_modules/
|
||||||
|
/config.json
|
||||||
21
NodeJS/node-dtdns-updater/LICENSE
Normal file
21
NodeJS/node-dtdns-updater/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2018 Alejandro W. Sior
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
15
NodeJS/node-dtdns-updater/README.md
Normal file
15
NodeJS/node-dtdns-updater/README.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# node-dtdns-updater
|
||||||
|
|
||||||
|
This is a simple Client Updater for [DtDNS.com](http://dtdns.com).
|
||||||
|
|
||||||
|
Install the dependencies with : `npm install`
|
||||||
|
Launch it with : `node index.js`
|
||||||
|
With the `-v` argument it logs everything.
|
||||||
|
|
||||||
|
The first time the program launches, a `config.json` file will be created, you'll have to configure your DtDNS credentials and the update delay.
|
||||||
|
In ip, leave `""` to point to the current ip.
|
||||||
|
|
||||||
|
See [DtDNS api info](https://www.dtdns.com/dtsite/updatespec) for more info.
|
||||||
|
|
||||||
|
## License
|
||||||
|
MIT (SEE LICENSE FILE)
|
||||||
70
NodeJS/node-dtdns-updater/index.js
Normal file
70
NodeJS/node-dtdns-updater/index.js
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
const snekfetch = require('snekfetch');
|
||||||
|
const fs = require('fs');
|
||||||
|
|
||||||
|
let verbose = false;
|
||||||
|
|
||||||
|
if (process.argv.indexOf('-v') >= 0 || process.argv.indexOf('--verbose') >= 0) {
|
||||||
|
verbose = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
let config = {};
|
||||||
|
if (!fs.existsSync('./config.json')) {
|
||||||
|
config.id = 'dtdns domain';
|
||||||
|
config.pw = 'dtdns account password';
|
||||||
|
config.ip = 'ip to point (let blank for current ip)';
|
||||||
|
config.delay = 120000;
|
||||||
|
fs.writeFileSync('./config.json', JSON.stringify(config));
|
||||||
|
console.error('Please configure the newly created config.json');
|
||||||
|
process.exit(-1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let text = fs.readFileSync('./config.json');
|
||||||
|
config = JSON.parse(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verbose === true) {
|
||||||
|
log(`Delay set to ${config.delay}`);
|
||||||
|
if (config.ip) {
|
||||||
|
log(`Pointed ip is ${config.ip}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log('Pointed ip is current ip');
|
||||||
|
}
|
||||||
|
log('Started in verbose mode');
|
||||||
|
}
|
||||||
|
|
||||||
|
async function update() {
|
||||||
|
if (verbose) {
|
||||||
|
log('Attempting GET request.');
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let req = snekfetch.get('https://www.dtdns.com/api/autodns.cfm')
|
||||||
|
.query('id', config.id)
|
||||||
|
.query('pw', config.pw);
|
||||||
|
if (config.ip !== '') {
|
||||||
|
req.query('ip', config.ip);
|
||||||
|
}
|
||||||
|
req.query('client', 'NodeDtDUp');
|
||||||
|
let res = await req.send();
|
||||||
|
if (verbose) {
|
||||||
|
log(`Server response : ${res.body}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
if (verbose) {
|
||||||
|
log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
function log(message) {
|
||||||
|
let date = new Date();
|
||||||
|
console.log('[' + date.getFullYear() + '/' + date.getDate() + '/' + (date.getMonth() + 1) + '-' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds() + ']' + message);
|
||||||
|
|
||||||
|
/* eslint-enable */
|
||||||
|
|
||||||
|
update();
|
||||||
|
|
||||||
|
setInterval(update, config.delay);
|
||||||
1164
NodeJS/node-dtdns-updater/npm-shrinkwrap.json
generated
Normal file
1164
NodeJS/node-dtdns-updater/npm-shrinkwrap.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
17
NodeJS/node-dtdns-updater/package.json
Normal file
17
NodeJS/node-dtdns-updater/package.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"name": "dtdns-updater",
|
||||||
|
"version": "2.0.0",
|
||||||
|
"description": "A program that automaticly update a ip address on DtDNS.com",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "aws",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"snekfetch": "^4.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"eslint": "^4.19.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user