rtmpdash/Pages/Dashboard.cshtml

195 lines
8.3 KiB
Plaintext

@page
@inject IAntiforgery Antiforgery
@using Microsoft.AspNetCore.Antiforgery
@using Microsoft.AspNetCore.Http
@using RTMPDash.DataModels
@model DashboardModel
@{
ViewData["Title"] = "Dashboard";
var tokenSet = Antiforgery.GetAndStoreTokens(HttpContext);
}
@if (string.IsNullOrWhiteSpace(HttpContext.Session.GetString("authenticatedUser"))) {
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>If you have an invite, <a asp-page="/Register">sign up</a> here. If you already have an account, <a asp-page="/Login">sign back in</a>.</p>
</div>
}
else {
var db = new AppDb.DbConn();
var user = db.Users.First(p => p.Username == HttpContext.Session.GetString("authenticatedUser"));
<div class="alert alert-success" role="alert">
<h4 class="alert-heading">Welcome back!</h4>
<p>Thanks for using @Program.SiteName. If you have any issues, please contact me on <a href="https://t.me/zotan">Telegram</a>, <a href="https://threema.id/S59S9U8J">Threema</a>, or via <a href="mailto:zotan@zotan.pw">email</a>.</p>
<hr>
<p class="mb-0">When using OBS, the stream key and leading slash before it is to be left out in the RTMP url.</p>
<hr/>
<p class="mb-0">For low-latancy streams, please set your keyframe interval to 1-2 seconds. Otherwise, automatic or something in the range of 4-8 seconds is fine.</p>
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" style="width:23ch">Profile URL</span>
</div>
<input type="text" class="form-control" id="input-profileurl" value="@Program.RootDomain/profile/@user.Username" disabled>
<div class="input-group-append">
<button class="btn btn-outline-secondary" role="button" id="button-copy-profileurl" onclick="copyToClipboard(document.getElementById('input-profileurl').value);">Copy</button>
</div>
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" style="width:23ch">Player URL</span>
</div>
<input type="text" class="form-control" id="input-playerurl" value="@Program.PlayerDomain/@user.Username" disabled>
<div class="input-group-append">
<button class="btn btn-outline-secondary" role="button" id="button-copy-playerurl" onclick="copyToClipboard(document.getElementById('input-playerurl').value);">Copy</button>
</div>
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" style="width:23ch">Stream key</span>
</div>
<input type="text" class="form-control" id="input-streamkey" value="@user.StreamKey" disabled>
<div class="input-group-append">
<button onclick="ajax_and_reload('streamkey_reset')" class="btn btn-outline-danger" role="button" id="button-reset-streamkey">Reset</button>
<button class="btn btn-outline-secondary" role="button" id="button-copy-streamkey" onclick="copyToClipboard(document.getElementById('input-streamkey').value);">Copy</button>
</div>
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" style="width:23ch">Stream URL</span>
</div>
<input type="text" class="form-control" id="input-streamurl" value="@Program.IngressDomain/ingress/@user.StreamKey" disabled>
<div class="input-group-append">
@if (StreamUtils.IsLive(user.Username)) {
/*if (StreamUtils.IsLive(user.Username, "1080")) {
<button class="btn btn-dark" role="button" style="width:13ch" disabled>Restreaming</button>
}
else {*/
<button class="btn btn-success" role="button" style="width:13ch" disabled>Live</button>
//}
//kept around for
//TODO Restreaming & direct stats support
}
else {
<button class="btn btn-danger" role="button" style="width:13ch" disabled>No data</button>
}
<button class="btn btn-outline-secondary" role="button" id="button-copy-streamurl" onclick="copyToClipboard(document.getElementById('input-streamurl').value);">Copy</button>
</div>
</div>
<form method="POST">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" style="width:23ch">Chat URL</span>
</div>
<input type="hidden" value="chaturl_set" name="action">
<input type="text" class="form-control" name="value" placeholder="Leave empty to disable" value="@user.ChatUrl">
<div class="input-group-append">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
<form method="POST">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" style="width:23ch">Announcement URL</span>
</div>
<input type="hidden" value="announceurl_set" name="action">
<input type="text" class="form-control" name="value" placeholder="Leave empty to disable" value="@user.AnnouncementUrl">
<div class="input-group-append">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
if (user.SrcRes == "unspecified") {
<div class="alert alert-warning" role="alert">
<b>Hey, you!</b>
<span>You have not yet specified the resolution and bitrate in which you stream. Please do so below. Thank you!</span>
</div>
}
<form method="POST">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" style="width:23ch">Source Resolution</span>
</div>
<input type="hidden" value="srcres_set" name="action">
<input type="text" class="form-control" name="value" placeholder="example: 1080p60 @@ 10Mbit (Shown in profile page tooltip)" value="@(user.SrcRes == "unspecified" ? "" : user.SrcRes)">
<div class="input-group-append">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
@if (user.AllowRestream) {
<form method="POST">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" style="width:23ch">Restream targets</span>
</div>
<input type="hidden" value="restream_targets_set" name="action">
<input type="text" class="form-control" name="value" placeholder="rtmp://live-ber.twitch.tv/app/streamkey,rtmp://a.rtmp.youtube.com/live2/streamkey" value="@user.RestreamTargets">
<div class="input-group-append">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
<form method="POST">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" style="width:23ch">Restream URLs</span>
</div>
<input type="hidden" value="restream_urls_set" name="action">
<input type="text" class="form-control" name="value" placeholder="https://twitch.tv/yourusername,https://youtube.com/c/channelid/live" value="@user.RestreamUrls">
<div class="input-group-append">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
}
<form method="POST">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" style="width:23ch">Pronoun (subject)</span>
</div>
<input type="hidden" value="pronoun_subj_set" name="action">
<input type="text" class="form-control" name="value" placeholder="they" value="@user.PronounSubject">
<div class="input-group-append">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
<form method="POST">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" style="width:23ch">Pronoun (possessive)</span>
</div>
<input type="hidden" value="pronoun_poss_set" name="action">
<input type="text" class="form-control" name="value" placeholder="their" value="@user.PronounPossessive">
<div class="input-group-append">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
<form method="POST">
<div class="form-group">
<label for="InputPassword">Change Password</label>
<input type="password" class="form-control" id="InputPassword" placeholder="New Password" name="pass" required>
<input type="hidden" value="password_change" name="action">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
<script>
function ajax_and_reload(action, target, value) {
$.ajax({method: 'POST', data: {action: action, target: target, value: value, '__RequestVerificationToken' : '@tokenSet.RequestToken'}, success: function () { location.reload() }})
}
</script>
}