Security

Token

There is no security token.

Firewall

main Name
Security enabled
Stateless

Configuration

Key Value
provider security.user.provider.concrete.app_user_provider
context main
entry_point App\Security\KbinAuthenticator
user_checker App\Security\UserChecker
access_denied_handler (none)
access_denied_url (none)
authenticators
[
  "two_factor"
  "remember_me"
  "App\Security\KbinAuthenticator"
  "App\Security\FacebookAuthenticator"
  "App\Security\GoogleAuthenticator"
  "App\Security\GithubAuthenticator"
  "App\Security\KeycloakAuthenticator"
]

Listeners

Listener Duration Response
Symfony\Component\Security\Http\Firewall\ChannelListener {#723
  -map: Symfony\Component\Security\Http\AccessMap {#722 …}
  -logger: Monolog\Logger {#783 …}
  -httpPort: 80
  -httpsPort: 443
}
0.00 ms (none)
Symfony\Component\Security\Http\Firewall\ContextListener {#706
  -tokenStorage: Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage {#1017 …}
  -sessionKey: "_security_main"
  -logger: Monolog\Logger {#783 …}
  -userProviders: Symfony\Component\DependencyInjection\Argument\RewindableGenerator {#705 …}
  -dispatcher: Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher {#747 …}
  -registered: false
  -trustResolver: Scheb\TwoFactorBundle\Security\Authentication\AuthenticationTrustResolver {#780 …}
  -sessionTrackerEnabler: Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage::enableUsageTracking(): void {#703 …}
}
0.64 ms (none)
Symfony\Component\Security\Http\Firewall\AuthenticatorManagerListener {#584
  -authenticatorManager: Symfony\Component\Security\Http\Authentication\AuthenticatorManager {#595 …}
}
0.00 ms (none)
Scheb\TwoFactorBundle\Security\Http\Firewall\TwoFactorAccessListener {#582
  -twoFactorFirewallConfig: Scheb\TwoFactorBundle\Security\TwoFactor\TwoFactorFirewallConfig {#842 …}
  -tokenStorage: Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage {#1018 …}
  -twoFactorAccessDecider: Scheb\TwoFactorBundle\Security\Authorization\TwoFactorAccessDecider {#581 …}
}
0.04 ms (none)
Symfony\Component\Security\Http\Firewall\AccessListener {#579
  -tokenStorage: Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage {#1018 …}
  -accessDecisionManager: Symfony\Component\Security\Core\Authorization\TraceableAccessDecisionManager {#937 …}
  -map: Symfony\Component\Security\Http\AccessMap {#722 …}
}
0.00 ms (none)
Symfony\Component\Security\Http\Firewall\LogoutListener {#786
  -tokenStorage: Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage {#1018 …}
  -options: [
    "csrf_parameter" => "_csrf_token"
    "csrf_token_id" => "logout"
    "logout_path" => "app_logout"
  ]
  -httpUtils: Symfony\Component\Security\Http\HttpUtils {#841 …}
  -csrfTokenManager: Symfony\Component\Security\Csrf\CsrfTokenManager {#1015 …}
  -eventDispatcher: Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher {#747 …}
}
0.00 ms (none)

Authenticators

No authenticators have been recorded. Check previous profiles on your authentication endpoint.

Access Decision

affirmative Strategy
# Voter class
1
"Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter"
2
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
3
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
4
"Symfony\Component\Security\Core\Authorization\Voter\ExpressionVoter"
5
"App\Security\Voter\EntryCommentVoter"
6
"App\Security\Voter\EntryVoter"
7
"App\Security\Voter\MagazineVoter"
8
"App\Security\Voter\MessageThreadVoter"
9
"App\Security\Voter\MessageVoter"
10
"App\Security\Voter\NotificationVoter"
11
"App\Security\Voter\OAuth2UserConsentVoter"
12
"App\Security\Voter\PostCommentVoter"
13
"App\Security\Voter\PostVoter"
14
"App\Security\Voter\UserVoter"

Access decision log

# Result Attributes Object
1 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
2 DENIED moderate
App\Entity\EntryComment {#1365
  +user: Proxies\__CG__\App\Entity\User {#1378 …}
  +entry: App\Entity\Entry {#1810 …}
  +magazine: App\Entity\Magazine {#313
    +icon: Proxies\__CG__\App\Entity\Image {#294 …}
    +name: "selfhosted@lemmy.world"
    +title: "selfhosted"
    +description: """
      A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don’t control.\n
      \n
      Rules:\n
      \n
      - Be civil: we’re here to support and learn from one another. Insults won’t be tolerated. Flame wars are frowned upon.\n
      - No spam posting.\n
      - Don’t duplicate the full text of your blog or github here. Just post the link for folks to click.\n
      - Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).\n
      - No trolling.\n
      \n
      Resources:\n
      \n
      - [awesome-selfhosted software](https://github.com/awesome-selfhosted/awesome-selfhosted)\n
      - [awesome-sysadmin](https://github.com/awesome-foss/awesome-sysadmin) resources\n
      - [Self-Hosted Podcast from Jupiter Broadcasting](https://selfhosted.show)\n
      \n
      > Any issues on the community? Report it using the report flag.\n
      \n
      > Questions? DM the mods!
      """
    +rules: null
    +subscriptionsCount: 1
    +entryCount: 222
    +entryCommentCount: 3916
    +postCount: 0
    +postCommentCount: 0
    +isAdult: false
    +customCss: null
    +lastActive: DateTime @1729582735 {#321
      date: 2024-10-22 09:38:55.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#285 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#281 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#270 …}
    +entries: Doctrine\ORM\PersistentCollection {#228 …}
    +posts: Doctrine\ORM\PersistentCollection {#186 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#248 …}
    +bans: Doctrine\ORM\PersistentCollection {#165 …}
    +reports: Doctrine\ORM\PersistentCollection {#151 …}
    +badges: Doctrine\ORM\PersistentCollection {#129 …}
    +logs: Doctrine\ORM\PersistentCollection {#119 …}
    +awards: Doctrine\ORM\PersistentCollection {#108 …}
    +categories: Doctrine\ORM\PersistentCollection {#95 …}
    -id: 120
    +apId: "selfhosted@lemmy.world"
    +apProfileId: "https://lemmy.world/c/selfhosted"
    +apPublicUrl: "https://lemmy.world/c/selfhosted"
    +apFollowersUrl: "https://lemmy.world/c/selfhosted/followers"
    +apInboxUrl: "https://lemmy.world/inbox"
    +apDomain: "lemmy.world"
    +apPreferredUsername: "selfhosted"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: null
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1703473826 {#322
      date: 2023-12-25 04:10:26.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1703473826 {#316
      date: 2023-12-25 04:10:26.0 +01:00
    }
  }
  +image: null
  +parent: null
  +root: null
  +body: """
    I recently set up a personal [Owncast](https://owncast.online/) instance on my home server, it should do what you’re looking for. I use [OBS Studio](https://obsproject.com/) to stream random stuff to friends, if your webcam can send RTMP streams it should be able to stream to Owncast without OBS in the middle - else, you just need to set up OBS to capture from the camera and stream to Owncast over RTMP.\n
    \n
    > the communication itself should be encrypted\n
    \n
    I suggest having the camera/OBS and Owncast on the same local network as RTMP is unencrypted and could possibly be intercepted between the source and the Owncast server, so make sure it happens over a reasonably “trusted” network. From there, my reverse proxy (apache) serves the owncast instance to the Internet over HTTPS (using let’s encrypt or self-signed certs), so it is encrypted between the server and clients. You can watch the stream from any web browser, or use another player such as VLC pointing to the correct stream address [[1]](https://owncast.online/docs/video/#your-stream-can-be-played-outside-of-your-web-site)\n
    \n
    > it seems that I might need to self-host a VPN to achieve this\n
    \n
    Owncast itself offers no authentication mechanism to *watch* the stream, so if you expose this to the internet directly and don’t want it public, you’d have to implement authentication at the reverse proxy level (HTTP Basic auth), or as you said you may set up a VPN server (I use wireguard) on the same machine as the Owncast instance and only expose the instance to the VPN network range (with the VPN providing the authentication layer). If you go for a VPN between your phone and owncast server, there’s also no real need to setup HTTPS at the reverseproxy level (as the VPN already provides encryption)\n
    \n
    Of course you should also forward the correct ports (VPN or HTTPS) from your home/ISP router to the server on your LAN.\n
    \n
    There are also dedicated [video surveillance](https://awesome-selfhosted.net/tags/video-surveillance.html) solutions.
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 10
  +score: 0
  +lastActive: DateTime @1711782301 {#1605
    date: 2024-03-30 08:05:01.0 +01:00
  }
  +ip: null
  +tags: [
    "your"
  ]
  +mentions: [
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
  ]
  +children: Doctrine\ORM\PersistentCollection {#1370 …}
  +nested: Doctrine\ORM\PersistentCollection {#1375 …}
  +votes: Doctrine\ORM\PersistentCollection {#2424 …}
  +reports: Doctrine\ORM\PersistentCollection {#1898 …}
  +favourites: Doctrine\ORM\PersistentCollection {#1841 …}
  +notifications: Doctrine\ORM\PersistentCollection {#2354 …}
  -id: 281387
  -bodyTs: "'/)':10,30 '/docs/video/#your-stream-can-be-played-outside-of-your-web-site)':178 '/tags/video-surveillance.html)':333 '1':175 'abl':47 'achiev':192 'address':174 'alreadi':300 'also':286,307,327 'anoth':164 'apach':125 'auth':232 'authent':198,224,270 'awesome-selfhosted.net':332 'awesome-selfhosted.net/tags/video-surveillance.html)':331 'basic':231 'browser':161 'camera':69 'camera/obs':86 'captur':66 'cert':143 'client':152 'communic':77 'correct':172,310 'could':99 'cours':304 'd':220 'dedic':328 'direct':212 'els':57 'encrypt':81,138,147,302 'expos':207,257 'forward':308 'friend':36 'go':274 'happen':114 'home':14 'home/isp':317 'host':188 'http':230 'https':134,292,314 'implement':223 'instanc':11,129,254,259 'intercept':102 'internet':132,211 'lan':324 'layer':271 'let':136 'level':229,296 'local':92 'look':22 'machin':250 'make':111 'may':238 'mechan':199 'middl':56 'might':183 'need':60,184,289 'network':93,119,263 'ob':26,53,64 'obsproject.com':29 'obsproject.com/)':28 'offer':196 'owncast':7,51,73,88,108,128,194,253,282 'owncast.online':9,177 'owncast.online/)':8 'owncast.online/docs/video/#your-stream-can-be-played-outside-of-your-web-site)':176 'person':6 'phone':280 'player':165 'point':169 'port':311 'possibl':100 'provid':268,301 'proxi':124,228 'public':218 'random':33 'rang':264 're':21 'real':288 'reason':117 'recent':2 'revers':123,227 'reverseproxi':295 'router':318 'rtmp':42,75,95 'said':236 'seem':180 'self':141,187 'self-host':186 'self-sign':140 'send':41 'serv':126 'server':15,109,150,243,283,321 'set':3,62,239 'setup':291 'sign':142 'solut':334 'sourc':105 'stream':32,43,49,71,157,173,203 'studio':27 'stuff':34 'suggest':83 'sure':112 'surveil':330 'trust':118 'unencrypt':97 'use':25,135,163,245 'video':329 'vlc':168 'vpn':190,242,262,267,277,299,312 'want':216 'watch':155,201 'web':160 'webcam':39 'wireguard':246 'without':52"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.world/comment/6414459"
  +editedAt: DateTimeImmutable @1711780652 {#1377
    date: 2024-03-30 07:37:32.0 +01:00
  }
  +createdAt: DateTimeImmutable @1704419548 {#1927
    date: 2024-01-05 02:52:28.0 +01:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
3 DENIED edit
App\Entity\EntryComment {#1365
  +user: Proxies\__CG__\App\Entity\User {#1378 …}
  +entry: App\Entity\Entry {#1810 …}
  +magazine: App\Entity\Magazine {#313
    +icon: Proxies\__CG__\App\Entity\Image {#294 …}
    +name: "selfhosted@lemmy.world"
    +title: "selfhosted"
    +description: """
      A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don’t control.\n
      \n
      Rules:\n
      \n
      - Be civil: we’re here to support and learn from one another. Insults won’t be tolerated. Flame wars are frowned upon.\n
      - No spam posting.\n
      - Don’t duplicate the full text of your blog or github here. Just post the link for folks to click.\n
      - Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).\n
      - No trolling.\n
      \n
      Resources:\n
      \n
      - [awesome-selfhosted software](https://github.com/awesome-selfhosted/awesome-selfhosted)\n
      - [awesome-sysadmin](https://github.com/awesome-foss/awesome-sysadmin) resources\n
      - [Self-Hosted Podcast from Jupiter Broadcasting](https://selfhosted.show)\n
      \n
      > Any issues on the community? Report it using the report flag.\n
      \n
      > Questions? DM the mods!
      """
    +rules: null
    +subscriptionsCount: 1
    +entryCount: 222
    +entryCommentCount: 3916
    +postCount: 0
    +postCommentCount: 0
    +isAdult: false
    +customCss: null
    +lastActive: DateTime @1729582735 {#321
      date: 2024-10-22 09:38:55.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#285 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#281 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#270 …}
    +entries: Doctrine\ORM\PersistentCollection {#228 …}
    +posts: Doctrine\ORM\PersistentCollection {#186 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#248 …}
    +bans: Doctrine\ORM\PersistentCollection {#165 …}
    +reports: Doctrine\ORM\PersistentCollection {#151 …}
    +badges: Doctrine\ORM\PersistentCollection {#129 …}
    +logs: Doctrine\ORM\PersistentCollection {#119 …}
    +awards: Doctrine\ORM\PersistentCollection {#108 …}
    +categories: Doctrine\ORM\PersistentCollection {#95 …}
    -id: 120
    +apId: "selfhosted@lemmy.world"
    +apProfileId: "https://lemmy.world/c/selfhosted"
    +apPublicUrl: "https://lemmy.world/c/selfhosted"
    +apFollowersUrl: "https://lemmy.world/c/selfhosted/followers"
    +apInboxUrl: "https://lemmy.world/inbox"
    +apDomain: "lemmy.world"
    +apPreferredUsername: "selfhosted"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: null
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1703473826 {#322
      date: 2023-12-25 04:10:26.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1703473826 {#316
      date: 2023-12-25 04:10:26.0 +01:00
    }
  }
  +image: null
  +parent: null
  +root: null
  +body: """
    I recently set up a personal [Owncast](https://owncast.online/) instance on my home server, it should do what you’re looking for. I use [OBS Studio](https://obsproject.com/) to stream random stuff to friends, if your webcam can send RTMP streams it should be able to stream to Owncast without OBS in the middle - else, you just need to set up OBS to capture from the camera and stream to Owncast over RTMP.\n
    \n
    > the communication itself should be encrypted\n
    \n
    I suggest having the camera/OBS and Owncast on the same local network as RTMP is unencrypted and could possibly be intercepted between the source and the Owncast server, so make sure it happens over a reasonably “trusted” network. From there, my reverse proxy (apache) serves the owncast instance to the Internet over HTTPS (using let’s encrypt or self-signed certs), so it is encrypted between the server and clients. You can watch the stream from any web browser, or use another player such as VLC pointing to the correct stream address [[1]](https://owncast.online/docs/video/#your-stream-can-be-played-outside-of-your-web-site)\n
    \n
    > it seems that I might need to self-host a VPN to achieve this\n
    \n
    Owncast itself offers no authentication mechanism to *watch* the stream, so if you expose this to the internet directly and don’t want it public, you’d have to implement authentication at the reverse proxy level (HTTP Basic auth), or as you said you may set up a VPN server (I use wireguard) on the same machine as the Owncast instance and only expose the instance to the VPN network range (with the VPN providing the authentication layer). If you go for a VPN between your phone and owncast server, there’s also no real need to setup HTTPS at the reverseproxy level (as the VPN already provides encryption)\n
    \n
    Of course you should also forward the correct ports (VPN or HTTPS) from your home/ISP router to the server on your LAN.\n
    \n
    There are also dedicated [video surveillance](https://awesome-selfhosted.net/tags/video-surveillance.html) solutions.
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 10
  +score: 0
  +lastActive: DateTime @1711782301 {#1605
    date: 2024-03-30 08:05:01.0 +01:00
  }
  +ip: null
  +tags: [
    "your"
  ]
  +mentions: [
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
  ]
  +children: Doctrine\ORM\PersistentCollection {#1370 …}
  +nested: Doctrine\ORM\PersistentCollection {#1375 …}
  +votes: Doctrine\ORM\PersistentCollection {#2424 …}
  +reports: Doctrine\ORM\PersistentCollection {#1898 …}
  +favourites: Doctrine\ORM\PersistentCollection {#1841 …}
  +notifications: Doctrine\ORM\PersistentCollection {#2354 …}
  -id: 281387
  -bodyTs: "'/)':10,30 '/docs/video/#your-stream-can-be-played-outside-of-your-web-site)':178 '/tags/video-surveillance.html)':333 '1':175 'abl':47 'achiev':192 'address':174 'alreadi':300 'also':286,307,327 'anoth':164 'apach':125 'auth':232 'authent':198,224,270 'awesome-selfhosted.net':332 'awesome-selfhosted.net/tags/video-surveillance.html)':331 'basic':231 'browser':161 'camera':69 'camera/obs':86 'captur':66 'cert':143 'client':152 'communic':77 'correct':172,310 'could':99 'cours':304 'd':220 'dedic':328 'direct':212 'els':57 'encrypt':81,138,147,302 'expos':207,257 'forward':308 'friend':36 'go':274 'happen':114 'home':14 'home/isp':317 'host':188 'http':230 'https':134,292,314 'implement':223 'instanc':11,129,254,259 'intercept':102 'internet':132,211 'lan':324 'layer':271 'let':136 'level':229,296 'local':92 'look':22 'machin':250 'make':111 'may':238 'mechan':199 'middl':56 'might':183 'need':60,184,289 'network':93,119,263 'ob':26,53,64 'obsproject.com':29 'obsproject.com/)':28 'offer':196 'owncast':7,51,73,88,108,128,194,253,282 'owncast.online':9,177 'owncast.online/)':8 'owncast.online/docs/video/#your-stream-can-be-played-outside-of-your-web-site)':176 'person':6 'phone':280 'player':165 'point':169 'port':311 'possibl':100 'provid':268,301 'proxi':124,228 'public':218 'random':33 'rang':264 're':21 'real':288 'reason':117 'recent':2 'revers':123,227 'reverseproxi':295 'router':318 'rtmp':42,75,95 'said':236 'seem':180 'self':141,187 'self-host':186 'self-sign':140 'send':41 'serv':126 'server':15,109,150,243,283,321 'set':3,62,239 'setup':291 'sign':142 'solut':334 'sourc':105 'stream':32,43,49,71,157,173,203 'studio':27 'stuff':34 'suggest':83 'sure':112 'surveil':330 'trust':118 'unencrypt':97 'use':25,135,163,245 'video':329 'vlc':168 'vpn':190,242,262,267,277,299,312 'want':216 'watch':155,201 'web':160 'webcam':39 'wireguard':246 'without':52"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.world/comment/6414459"
  +editedAt: DateTimeImmutable @1711780652 {#1377
    date: 2024-03-30 07:37:32.0 +01:00
  }
  +createdAt: DateTimeImmutable @1704419548 {#1927
    date: 2024-01-05 02:52:28.0 +01:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
4 DENIED moderate
App\Entity\EntryComment {#1365
  +user: Proxies\__CG__\App\Entity\User {#1378 …}
  +entry: App\Entity\Entry {#1810 …}
  +magazine: App\Entity\Magazine {#313
    +icon: Proxies\__CG__\App\Entity\Image {#294 …}
    +name: "selfhosted@lemmy.world"
    +title: "selfhosted"
    +description: """
      A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don’t control.\n
      \n
      Rules:\n
      \n
      - Be civil: we’re here to support and learn from one another. Insults won’t be tolerated. Flame wars are frowned upon.\n
      - No spam posting.\n
      - Don’t duplicate the full text of your blog or github here. Just post the link for folks to click.\n
      - Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).\n
      - No trolling.\n
      \n
      Resources:\n
      \n
      - [awesome-selfhosted software](https://github.com/awesome-selfhosted/awesome-selfhosted)\n
      - [awesome-sysadmin](https://github.com/awesome-foss/awesome-sysadmin) resources\n
      - [Self-Hosted Podcast from Jupiter Broadcasting](https://selfhosted.show)\n
      \n
      > Any issues on the community? Report it using the report flag.\n
      \n
      > Questions? DM the mods!
      """
    +rules: null
    +subscriptionsCount: 1
    +entryCount: 222
    +entryCommentCount: 3916
    +postCount: 0
    +postCommentCount: 0
    +isAdult: false
    +customCss: null
    +lastActive: DateTime @1729582735 {#321
      date: 2024-10-22 09:38:55.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#285 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#281 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#270 …}
    +entries: Doctrine\ORM\PersistentCollection {#228 …}
    +posts: Doctrine\ORM\PersistentCollection {#186 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#248 …}
    +bans: Doctrine\ORM\PersistentCollection {#165 …}
    +reports: Doctrine\ORM\PersistentCollection {#151 …}
    +badges: Doctrine\ORM\PersistentCollection {#129 …}
    +logs: Doctrine\ORM\PersistentCollection {#119 …}
    +awards: Doctrine\ORM\PersistentCollection {#108 …}
    +categories: Doctrine\ORM\PersistentCollection {#95 …}
    -id: 120
    +apId: "selfhosted@lemmy.world"
    +apProfileId: "https://lemmy.world/c/selfhosted"
    +apPublicUrl: "https://lemmy.world/c/selfhosted"
    +apFollowersUrl: "https://lemmy.world/c/selfhosted/followers"
    +apInboxUrl: "https://lemmy.world/inbox"
    +apDomain: "lemmy.world"
    +apPreferredUsername: "selfhosted"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: null
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1703473826 {#322
      date: 2023-12-25 04:10:26.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1703473826 {#316
      date: 2023-12-25 04:10:26.0 +01:00
    }
  }
  +image: null
  +parent: null
  +root: null
  +body: """
    I recently set up a personal [Owncast](https://owncast.online/) instance on my home server, it should do what you’re looking for. I use [OBS Studio](https://obsproject.com/) to stream random stuff to friends, if your webcam can send RTMP streams it should be able to stream to Owncast without OBS in the middle - else, you just need to set up OBS to capture from the camera and stream to Owncast over RTMP.\n
    \n
    > the communication itself should be encrypted\n
    \n
    I suggest having the camera/OBS and Owncast on the same local network as RTMP is unencrypted and could possibly be intercepted between the source and the Owncast server, so make sure it happens over a reasonably “trusted” network. From there, my reverse proxy (apache) serves the owncast instance to the Internet over HTTPS (using let’s encrypt or self-signed certs), so it is encrypted between the server and clients. You can watch the stream from any web browser, or use another player such as VLC pointing to the correct stream address [[1]](https://owncast.online/docs/video/#your-stream-can-be-played-outside-of-your-web-site)\n
    \n
    > it seems that I might need to self-host a VPN to achieve this\n
    \n
    Owncast itself offers no authentication mechanism to *watch* the stream, so if you expose this to the internet directly and don’t want it public, you’d have to implement authentication at the reverse proxy level (HTTP Basic auth), or as you said you may set up a VPN server (I use wireguard) on the same machine as the Owncast instance and only expose the instance to the VPN network range (with the VPN providing the authentication layer). If you go for a VPN between your phone and owncast server, there’s also no real need to setup HTTPS at the reverseproxy level (as the VPN already provides encryption)\n
    \n
    Of course you should also forward the correct ports (VPN or HTTPS) from your home/ISP router to the server on your LAN.\n
    \n
    There are also dedicated [video surveillance](https://awesome-selfhosted.net/tags/video-surveillance.html) solutions.
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 10
  +score: 0
  +lastActive: DateTime @1711782301 {#1605
    date: 2024-03-30 08:05:01.0 +01:00
  }
  +ip: null
  +tags: [
    "your"
  ]
  +mentions: [
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
    "@shadowintheday2@lemmy.world"
  ]
  +children: Doctrine\ORM\PersistentCollection {#1370 …}
  +nested: Doctrine\ORM\PersistentCollection {#1375 …}
  +votes: Doctrine\ORM\PersistentCollection {#2424 …}
  +reports: Doctrine\ORM\PersistentCollection {#1898 …}
  +favourites: Doctrine\ORM\PersistentCollection {#1841 …}
  +notifications: Doctrine\ORM\PersistentCollection {#2354 …}
  -id: 281387
  -bodyTs: "'/)':10,30 '/docs/video/#your-stream-can-be-played-outside-of-your-web-site)':178 '/tags/video-surveillance.html)':333 '1':175 'abl':47 'achiev':192 'address':174 'alreadi':300 'also':286,307,327 'anoth':164 'apach':125 'auth':232 'authent':198,224,270 'awesome-selfhosted.net':332 'awesome-selfhosted.net/tags/video-surveillance.html)':331 'basic':231 'browser':161 'camera':69 'camera/obs':86 'captur':66 'cert':143 'client':152 'communic':77 'correct':172,310 'could':99 'cours':304 'd':220 'dedic':328 'direct':212 'els':57 'encrypt':81,138,147,302 'expos':207,257 'forward':308 'friend':36 'go':274 'happen':114 'home':14 'home/isp':317 'host':188 'http':230 'https':134,292,314 'implement':223 'instanc':11,129,254,259 'intercept':102 'internet':132,211 'lan':324 'layer':271 'let':136 'level':229,296 'local':92 'look':22 'machin':250 'make':111 'may':238 'mechan':199 'middl':56 'might':183 'need':60,184,289 'network':93,119,263 'ob':26,53,64 'obsproject.com':29 'obsproject.com/)':28 'offer':196 'owncast':7,51,73,88,108,128,194,253,282 'owncast.online':9,177 'owncast.online/)':8 'owncast.online/docs/video/#your-stream-can-be-played-outside-of-your-web-site)':176 'person':6 'phone':280 'player':165 'point':169 'port':311 'possibl':100 'provid':268,301 'proxi':124,228 'public':218 'random':33 'rang':264 're':21 'real':288 'reason':117 'recent':2 'revers':123,227 'reverseproxi':295 'router':318 'rtmp':42,75,95 'said':236 'seem':180 'self':141,187 'self-host':186 'self-sign':140 'send':41 'serv':126 'server':15,109,150,243,283,321 'set':3,62,239 'setup':291 'sign':142 'solut':334 'sourc':105 'stream':32,43,49,71,157,173,203 'studio':27 'stuff':34 'suggest':83 'sure':112 'surveil':330 'trust':118 'unencrypt':97 'use':25,135,163,245 'video':329 'vlc':168 'vpn':190,242,262,267,277,299,312 'want':216 'watch':155,201 'web':160 'webcam':39 'wireguard':246 'without':52"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.world/comment/6414459"
  +editedAt: DateTimeImmutable @1711780652 {#1377
    date: 2024-03-30 07:37:32.0 +01:00
  }
  +createdAt: DateTimeImmutable @1704419548 {#1927
    date: 2024-01-05 02:52:28.0 +01:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
5 DENIED edit
App\Entity\Magazine {#313
  +icon: Proxies\__CG__\App\Entity\Image {#294 …}
  +name: "selfhosted@lemmy.world"
  +title: "selfhosted"
  +description: """
    A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don’t control.\n
    \n
    Rules:\n
    \n
    - Be civil: we’re here to support and learn from one another. Insults won’t be tolerated. Flame wars are frowned upon.\n
    - No spam posting.\n
    - Don’t duplicate the full text of your blog or github here. Just post the link for folks to click.\n
    - Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).\n
    - No trolling.\n
    \n
    Resources:\n
    \n
    - [awesome-selfhosted software](https://github.com/awesome-selfhosted/awesome-selfhosted)\n
    - [awesome-sysadmin](https://github.com/awesome-foss/awesome-sysadmin) resources\n
    - [Self-Hosted Podcast from Jupiter Broadcasting](https://selfhosted.show)\n
    \n
    > Any issues on the community? Report it using the report flag.\n
    \n
    > Questions? DM the mods!
    """
  +rules: null
  +subscriptionsCount: 1
  +entryCount: 222
  +entryCommentCount: 3916
  +postCount: 0
  +postCommentCount: 0
  +isAdult: false
  +customCss: null
  +lastActive: DateTime @1729582735 {#321
    date: 2024-10-22 09:38:55.0 +02:00
  }
  +markedForDeletionAt: null
  +tags: null
  +moderators: Doctrine\ORM\PersistentCollection {#285 …}
  +ownershipRequests: Doctrine\ORM\PersistentCollection {#281 …}
  +moderatorRequests: Doctrine\ORM\PersistentCollection {#270 …}
  +entries: Doctrine\ORM\PersistentCollection {#228 …}
  +posts: Doctrine\ORM\PersistentCollection {#186 …}
  +subscriptions: Doctrine\ORM\PersistentCollection {#248 …}
  +bans: Doctrine\ORM\PersistentCollection {#165 …}
  +reports: Doctrine\ORM\PersistentCollection {#151 …}
  +badges: Doctrine\ORM\PersistentCollection {#129 …}
  +logs: Doctrine\ORM\PersistentCollection {#119 …}
  +awards: Doctrine\ORM\PersistentCollection {#108 …}
  +categories: Doctrine\ORM\PersistentCollection {#95 …}
  -id: 120
  +apId: "selfhosted@lemmy.world"
  +apProfileId: "https://lemmy.world/c/selfhosted"
  +apPublicUrl: "https://lemmy.world/c/selfhosted"
  +apFollowersUrl: "https://lemmy.world/c/selfhosted/followers"
  +apInboxUrl: "https://lemmy.world/inbox"
  +apDomain: "lemmy.world"
  +apPreferredUsername: "selfhosted"
  +apDiscoverable: true
  +apManuallyApprovesFollowers: null
  +privateKey: null
  +publicKey: null
  +apFetchedAt: DateTime @1703473826 {#322
    date: 2023-12-25 04:10:26.0 +01:00
  }
  +apDeletedAt: null
  +apTimeoutAt: null
  +visibility: "visible             "
  +createdAt: DateTimeImmutable @1703473826 {#316
    date: 2023-12-25 04:10:26.0 +01:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS DENIED
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details