mirror of
https://github.com/Tzahi12345/YoutubeDL-Material.git
synced 2026-04-23 06:43:21 +03:00
Added new API key and using API key config items to enable a public API
API key config items are implemented UI-side Added ability to generate API keys through the settings Switched getmp3s and getmp4s api calls to be GET requests rather than POST Removed unused code from settings dialog
This commit is contained in:
@@ -1218,7 +1218,10 @@ const deleteFolderRecursive = function(folder_to_delete) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
app.use(function(req, res, next) {
|
app.use(function(req, res, next) {
|
||||||
res.header("Access-Control-Allow-Origin", getOrigin());
|
var client_origin = req.get('origin');
|
||||||
|
if (client_origin === getOrigin() || (req.headers.authorization && config_api.getConfigItem('ytdl_use_api_key') && req.headers.authorization === config_api.getConfigItem('ytdl_api_key'))) {
|
||||||
|
res.header("Access-Control-Allow-Origin", client_origin);
|
||||||
|
}
|
||||||
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
|
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
@@ -1584,7 +1587,7 @@ app.post('/api/fileStatusMp4', function(req, res) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// gets all download mp3s
|
// gets all download mp3s
|
||||||
app.post('/api/getMp3s', function(req, res) {
|
app.get('/api/getMp3s', function(req, res) {
|
||||||
var mp3s = db.get('files.audio').value(); // getMp3s();
|
var mp3s = db.get('files.audio').value(); // getMp3s();
|
||||||
var playlists = db.get('playlists.audio').value();
|
var playlists = db.get('playlists.audio').value();
|
||||||
|
|
||||||
@@ -1596,7 +1599,7 @@ app.post('/api/getMp3s', function(req, res) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// gets all download mp4s
|
// gets all download mp4s
|
||||||
app.post('/api/getMp4s', function(req, res) {
|
app.get('/api/getMp4s', function(req, res) {
|
||||||
var mp4s = db.get('files.video').value(); // getMp4s();
|
var mp4s = db.get('files.video').value(); // getMp4s();
|
||||||
var playlists = db.get('playlists.video').value();
|
var playlists = db.get('playlists.video').value();
|
||||||
|
|
||||||
@@ -2061,7 +2064,7 @@ app.post('/api/deleteFile', async (req, res) => {
|
|||||||
} else if (type === 'video') {
|
} else if (type === 'video') {
|
||||||
deleteVideoFile(fileName);
|
deleteVideoFile(fileName);
|
||||||
}
|
}
|
||||||
res.send()
|
res.send({});
|
||||||
});
|
});
|
||||||
|
|
||||||
app.post('/api/downloadArchive', async (req, res) => {
|
app.post('/api/downloadArchive', async (req, res) => {
|
||||||
@@ -2145,6 +2148,16 @@ app.post('/api/checkPin', async (req, res) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// API Key API calls
|
||||||
|
|
||||||
|
app.post('/api/generateNewAPIKey', function (req, res) {
|
||||||
|
const new_api_key = uuid();
|
||||||
|
config_api.setConfigItem('ytdl_api_key', new_api_key);
|
||||||
|
res.send({new_api_key: new_api_key});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Streaming API calls
|
||||||
|
|
||||||
app.get('/api/video/:id', function(req , res){
|
app.get('/api/video/:id', function(req , res){
|
||||||
var head;
|
var head;
|
||||||
let optionalParams = url_api.parse(req.url,true).query;
|
let optionalParams = url_api.parse(req.url,true).query;
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
"settings_pin_required": false
|
"settings_pin_required": false
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
|
"use_API_key": false,
|
||||||
|
"API_key": "",
|
||||||
"use_youtube_API": false,
|
"use_youtube_API": false,
|
||||||
"youtube_API_key": ""
|
"youtube_API_key": ""
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
"settings_pin_required": false
|
"settings_pin_required": false
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
|
"use_API_key": false,
|
||||||
|
"API_key": "",
|
||||||
"use_youtube_API": false,
|
"use_youtube_API": false,
|
||||||
"youtube_API_key": ""
|
"youtube_API_key": ""
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -163,6 +163,8 @@ DEFAULT_CONFIG = {
|
|||||||
"settings_pin_required": false
|
"settings_pin_required": false
|
||||||
},
|
},
|
||||||
"API": {
|
"API": {
|
||||||
|
"use_API_key": false,
|
||||||
|
"API_key": "",
|
||||||
"use_youtube_API": false,
|
"use_youtube_API": false,
|
||||||
"youtube_API_key": ""
|
"youtube_API_key": ""
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -68,6 +68,14 @@ let CONFIG_ITEMS = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// API
|
// API
|
||||||
|
'ytdl_use_api_key': {
|
||||||
|
'key': 'ytdl_use_api_key',
|
||||||
|
'path': 'YoutubeDLMaterial.API.use_API_key'
|
||||||
|
},
|
||||||
|
'ytdl_api_key': {
|
||||||
|
'key': 'ytdl_api_key',
|
||||||
|
'path': 'YoutubeDLMaterial.API.API_key'
|
||||||
|
},
|
||||||
'ytdl_use_youtube_api': {
|
'ytdl_use_youtube_api': {
|
||||||
'key': 'ytdl_use_youtube_api',
|
'key': 'ytdl_use_youtube_api',
|
||||||
'path': 'YoutubeDLMaterial.API.use_youtube_API'
|
'path': 'YoutubeDLMaterial.API.use_youtube_API'
|
||||||
|
|||||||
@@ -111,11 +111,11 @@ export class PostsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getMp3s() {
|
getMp3s() {
|
||||||
return this.http.post(this.path + 'getMp3s', {});
|
return this.http.get(this.path + 'getMp3s', {});
|
||||||
}
|
}
|
||||||
|
|
||||||
getMp4s() {
|
getMp4s() {
|
||||||
return this.http.post(this.path + 'getMp4s', {});
|
return this.http.get(this.path + 'getMp4s', {});
|
||||||
}
|
}
|
||||||
|
|
||||||
getFile(uid, type) {
|
getFile(uid, type) {
|
||||||
@@ -154,6 +154,10 @@ export class PostsService {
|
|||||||
return this.http.post(this.path + 'checkPin', {input_pin: unhashed_pin});
|
return this.http.post(this.path + 'checkPin', {input_pin: unhashed_pin});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
generateNewAPIKey() {
|
||||||
|
return this.http.post(this.path + 'generateNewAPIKey', {});
|
||||||
|
}
|
||||||
|
|
||||||
enableSharing(uid, type, is_playlist) {
|
enableSharing(uid, type, is_playlist) {
|
||||||
return this.http.post(this.path + 'enableSharing', {uid: uid, type: type, is_playlist: is_playlist});
|
return this.http.post(this.path + 'enableSharing', {uid: uid, type: type, is_playlist: is_playlist});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,13 +106,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
<!-- Encryption
|
|
||||||
<mat-tab label="Encryption" i18n-label="Host settings label">
|
|
||||||
<ng-template matTabContent>
|
|
||||||
|
|
||||||
</ng-template>
|
|
||||||
</mat-tab>
|
|
||||||
-->
|
|
||||||
<!-- Downloader -->
|
<!-- Downloader -->
|
||||||
<mat-tab label="Downloader" i18n-label="Downloader settings label">
|
<mat-tab label="Downloader" i18n-label="Downloader settings label">
|
||||||
<ng-template matTabContent>
|
<ng-template matTabContent>
|
||||||
@@ -179,6 +172,25 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<mat-divider></mat-divider>
|
<mat-divider></mat-divider>
|
||||||
|
<div *ngIf="new_config" class="container-fluid">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 mt-3">
|
||||||
|
<mat-checkbox color="accent" [(ngModel)]="new_config['API']['use_API_key']"><ng-container i18n="Enable Public API key setting">Enable Public API</ng-container></mat-checkbox>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 mb-3">
|
||||||
|
<div class="enable-api-key-div">
|
||||||
|
<mat-form-field color="accent">
|
||||||
|
<input [disabled]="!new_config['API']['use_API_key']" [(ngModel)]="new_config['API']['API_key']" matInput placeholder="Public API Key" i18n-placeholder="Public API Key setting placeholder" required>
|
||||||
|
<mat-hint><a target="_blank" href="https://developers.google.com/youtube/v3/getting-started"><ng-container i18n="View API docs setting hint">View documentation</ng-container></a></mat-hint>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
<div class="api-key-div">
|
||||||
|
<button matTooltip-i18n matTooltip="This will delete your old API key!" mat-stroked-button (click)="generateAPIKey()"><ng-container i18n="Generate key button">Generate</ng-container></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<mat-divider></mat-divider>
|
||||||
<div *ngIf="new_config" class="container-fluid">
|
<div *ngIf="new_config" class="container-fluid">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 mt-3">
|
<div class="col-12 mt-3">
|
||||||
@@ -218,36 +230,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
<!-- API
|
|
||||||
<mat-tab label="API" i18n-label="Host settings label">
|
|
||||||
<ng-template matTabContent>
|
|
||||||
|
|
||||||
</ng-template>
|
|
||||||
</mat-tab>-->
|
|
||||||
<!-- Themes
|
|
||||||
<mat-tab label="Themes" i18n-label="Host settings label">
|
|
||||||
<ng-template matTabContent>
|
|
||||||
|
|
||||||
</ng-template>
|
|
||||||
</mat-tab> -->
|
|
||||||
<!-- Subscriptions
|
|
||||||
<mat-tab label="Subscriptions" i18n-label="Host settings label">
|
|
||||||
<ng-template matTabContent>
|
|
||||||
|
|
||||||
</ng-template>
|
|
||||||
</mat-tab> -->
|
|
||||||
<!-- Extensions
|
|
||||||
<mat-tab label="Extensions" i18n-label="Host settings label">
|
|
||||||
<ng-template matTabContent>
|
|
||||||
|
|
||||||
</ng-template>
|
|
||||||
</mat-tab> -->
|
|
||||||
<!-- Version Control
|
|
||||||
<mat-tab label="Versions" i18n-label="Host settings label">
|
|
||||||
<ng-template matTabContent>
|
|
||||||
|
|
||||||
</ng-template>
|
|
||||||
</mat-tab> -->
|
|
||||||
<!-- Advanced -->
|
<!-- Advanced -->
|
||||||
<mat-tab label="Advanced" i18n-label="Host settings label">
|
<mat-tab label="Advanced" i18n-label="Host settings label">
|
||||||
<ng-template matTabContent>
|
<ng-template matTabContent>
|
||||||
|
|||||||
@@ -11,3 +11,13 @@
|
|||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
top: 20px;
|
top: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.enable-api-key-div {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.api-key-div {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
@@ -86,6 +86,15 @@ export class SettingsComponent implements OnInit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
generateAPIKey() {
|
||||||
|
this.postsService.generateNewAPIKey().subscribe(res => {
|
||||||
|
if (res['new_api_key']) {
|
||||||
|
this.initial_config.API.API_key = res['new_api_key'];
|
||||||
|
this.new_config.API.API_key = res['new_api_key'];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
localeSelectChanged(new_val) {
|
localeSelectChanged(new_val) {
|
||||||
localStorage.setItem('locale', new_val);
|
localStorage.setItem('locale', new_val);
|
||||||
this.openSnackBar('Language successfully changed! Reload to update the page.')
|
this.openSnackBar('Language successfully changed! Reload to update the page.')
|
||||||
|
|||||||
Reference in New Issue
Block a user