<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: oz9un</title>
    <description>The latest articles on DEV Community by oz9un (@oz9un).</description>
    <link>https://dev.to/oz9un</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F709742%2F819a4005-40d3-4438-91fb-1ba2d12dc945.jpeg</url>
      <title>DEV Community: oz9un</title>
      <link>https://dev.to/oz9un</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oz9un"/>
    <language>en</language>
    <item>
      <title>Developers' Collaborative Playlist</title>
      <dc:creator>oz9un</dc:creator>
      <pubDate>Tue, 07 Dec 2021 23:28:31 +0000</pubDate>
      <link>https://dev.to/oz9un/developers-collaborative-playlist-3eih</link>
      <guid>https://dev.to/oz9un/developers-collaborative-playlist-3eih</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
My Workflow

&lt;ul&gt;
&lt;li&gt;What inspired me&lt;/li&gt;
&lt;li&gt;
How I created the workflow?

&lt;ul&gt;
&lt;li&gt;Dealing with Spotify API&lt;/li&gt;
&lt;li&gt;Issue Handling&lt;/li&gt;
&lt;li&gt;Random Gifs&lt;/li&gt;
&lt;li&gt;Updating Contributors&lt;/li&gt;
&lt;li&gt;Error Handling&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Submission Category&lt;/li&gt;
&lt;li&gt;Additional Resources/Info&lt;/li&gt;
&lt;li&gt;Song Request&lt;/li&gt;
&lt;/ol&gt;




&lt;center&gt;**_A drop of musical taste from every contributor..._**&lt;/center&gt;

&lt;center&gt;**_Welcome to the developer's collaborative playlist._**&lt;/center&gt;




&lt;h2&gt;
  
  
  My Workflow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What inspired me?
&lt;/h3&gt;

&lt;p&gt;I spend most of my free time with coding and I need fairy of inspiration during these times of intense thinking.&lt;/p&gt;

&lt;p&gt;Focusing on the same issue for a long time can be very tiring sometimes. Especially if the target problem doesn't have a single solution.&lt;/p&gt;

&lt;p&gt;Every time I feel burnout, I want to take my mind on different adventures. And often the easiest way to start such an adventure is with a 'Shuffle Play' button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2FlJEGgG5ajs4zC%2Fgiphy.gif%3Fcid%3Decf05e47xi4jrxg1pzq9g0ta4txnrhvf0rh0vxtj2rypwwep%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2FlJEGgG5ajs4zC%2Fgiphy.gif%3Fcid%3Decf05e47xi4jrxg1pzq9g0ta4txnrhvf0rh0vxtj2rypwwep%26rid%3Dgiphy.gif%26ct%3Dg" alt="need_vacation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same algorithm can be written differently by each developer. The developer's code style becomes their signature.&lt;/p&gt;

&lt;p&gt;So the question in my mind was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Coding is an art, so what do artists listen to while performing this art?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2FRbDKaczqWovIugyJmW%2Fgiphy.gif%3Fcid%3D790b76117fcb52c86762d981a8ef2cfa4b396358982ef5fe%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2FRbDKaczqWovIugyJmW%2Fgiphy.gif%3Fcid%3D790b76117fcb52c86762d981a8ef2cfa4b396358982ef5fe%26rid%3Dgiphy.gif%26ct%3Dg" alt="code_n_music"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I thought it might be a pretty fun and elegant way to answer: creating a &lt;a href="https://github.com/oz9un/Developers-Playlist" rel="noopener noreferrer"&gt;&lt;strong&gt;developers' collaborative playlist&lt;/strong&gt;&lt;/a&gt;, all automated using &lt;strong&gt;GitHub Actions&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  How I created the workflow?
&lt;/h3&gt;

&lt;p&gt;If I could, I would like to automate everything in this life. I may never be able to automate dealing with people, but this project has been a good medicine for my automatization addiction. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.giphy.com%2Fmedia%2Ff5YrGliGs8sn0Mjh2e%2Fgiphy.gif%3Fcid%3Decf05e47f2eqvvemztoilqpjj3d36olw0ja4t0nq34km1r7n%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.giphy.com%2Fmedia%2Ff5YrGliGs8sn0Mjh2e%2Fgiphy.gif%3Fcid%3Decf05e47f2eqvvemztoilqpjj3d36olw0ja4t0nq34km1r7n%26rid%3Dgiphy.gif%26ct%3Dg" alt="addiction"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First I had to overcome some problems before reaching my final goal:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Communication with &lt;a href="https://developer.spotify.com/documentation/web-api/" rel="noopener noreferrer"&gt;Spotify API&lt;/a&gt;, refreshing OAuth tokens, searching for songs and adding a track to the target playlist...&lt;/li&gt;
&lt;li&gt;Evaluating the issues opened by the users and returning an appropriate result. Answering and closing issues.&lt;/li&gt;
&lt;li&gt;To make things a little wackier, picking random gifs from various categories and using them.&lt;/li&gt;
&lt;li&gt;The name of the developer who opened the issue and their favorite song should be stored as a contributor and written in the README. &lt;/li&gt;
&lt;li&gt;Errors, errors and errors.&lt;/li&gt;
&lt;/ol&gt;




&lt;h4&gt;
  
  
  Solution workflow for problem 1: dealing with Spotify API
&lt;/h4&gt;

&lt;p&gt;Let's be honest, Spotify has pretty good API documentation. But things can get complicated as you get involved.&lt;/p&gt;

&lt;p&gt;I didn't want to have a lot of code in this repository I created for GitHub Actions Hackathon and make the situation even more complicated. For this reason, I created a different &lt;a href="https://github.com/oz9un/Spotify-API-Apps" rel="noopener noreferrer"&gt;&lt;strong&gt;public repository&lt;/strong&gt;&lt;/a&gt; and kept all the tools I wrote to communicate with the Spotify API in there. Thus, I would be able to effectively use GitHub actions' ability to communicate with a different repository.&lt;/p&gt;

&lt;p&gt;My two different repository will communicate like:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2FWySK0nQiJKLy25HLhp%2Fgiphy.gif%3Fcid%3Decf05e474utlbpznzvyxlspp0cklmizc9q8fbn7srlcdj29s%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2FWySK0nQiJKLy25HLhp%2Fgiphy.gif%3Fcid%3Decf05e474utlbpznzvyxlspp0cklmizc9q8fbn7srlcdj29s%26rid%3Dgiphy.gif%26ct%3Dg" alt="communicate"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The constantly talking kid on the left would represent the repository where I used GitHub Actions and submitted for this Hackathon, while the kid on the right that would just listen and execute the commands would represent the repository where I kept my auxiliary Spotify API functions.&lt;/p&gt;

&lt;p&gt;In this scenario, the string itself would of course be &lt;strong&gt;GitHub Actions&lt;/strong&gt;. &lt;/p&gt;


&lt;h4&gt;
  
  
  Solution workflow for problem 2: issues, issues...
&lt;/h4&gt;

&lt;p&gt;In order for the developers to make a song request, they should open an issue with the title 'song request' and the body of the issue should have a text in - format.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd4t9qfu81o3ozqwtokb.GIF" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd4t9qfu81o3ozqwtokb.GIF" alt="song_request"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thus, it was necessary to correctly evaluate the issues opened by the users and to produce the necessary actions accordingly.&lt;/p&gt;

&lt;p&gt;In this process, I explored the unlimited features of GitHub Actions and had to use many features from if-checks to environment variables. &lt;/p&gt;


&lt;h4&gt;
  
  
  Solution workflow for problem 3: random wacky gifs
&lt;/h4&gt;

&lt;p&gt;Generating random gifs was very useful in two ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responses to issues opened by developers would be more fun and varied.&lt;/li&gt;
&lt;li&gt;There couldn't have been a better opportunity for me to learn about environment variables and cross-jobs data sharing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Therefore I did it. do i regret it? No. Was that wacky? Maybe.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.giphy.com%2Fmedia%2Fp4yyZS2G7tlA2tr5X0%2Fgiphy.gif%3Fcid%3Decf05e478jscdosip452h60vl0hyqtqtpj9jh96ry0sh4t6w%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.giphy.com%2Fmedia%2Fp4yyZS2G7tlA2tr5X0%2Fgiphy.gif%3Fcid%3Decf05e478jscdosip452h60vl0hyqtqtpj9jh96ry0sh4t6w%26rid%3Dgiphy.gif%26ct%3Dg" alt="wacky"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h4&gt;
  
  
  Solution workflow for problem 4: contributors
&lt;/h4&gt;

&lt;p&gt;It was a good idea to view the songs added by each user. Until you try to code it. &lt;/p&gt;

&lt;p&gt;GitHub Actions does not keep any persistent data by nature. So I had to overcome this nature and keep contributors' information:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuofuxnfbwl2c91t263zo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuofuxnfbwl2c91t263zo.png" alt="contributors"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created files for every single contributor. Each time a new song was added, these files and the README_template would be concatenated and a new README file would be created. At this point, I used the code push feature to the target repository, which is readily available in the GitHub Actions marketplace.&lt;/p&gt;


&lt;h4&gt;
  
  
  Solution workflow for problem 5: error handling
&lt;/h4&gt;

&lt;p&gt;If the input of the developed tool is controlled by the users, errors are inevitable.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.giphy.com%2Fmedia%2Fl46Czzp0KEHSO7OdG%2Fgiphy.gif%3Fcid%3Decf05e47hwwd5eq7zlyund83tzouff2exeku09psrhsh3t5r%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.giphy.com%2Fmedia%2Fl46Czzp0KEHSO7OdG%2Fgiphy.gif%3Fcid%3Decf05e47hwwd5eq7zlyund83tzouff2exeku09psrhsh3t5r%26rid%3Dgiphy.gif%26ct%3Dg" alt="error"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this scenario, developers are expected to adhere to certain formats when requesting songs. For this reason, all wrong entries need to be handled properly. &lt;/p&gt;

&lt;p&gt;For example, in case of a wrong issue title or when the searched song is not found, an appropriate answer should be returned and the developer should be informed. &lt;/p&gt;

&lt;p&gt;I will continue to improve this part after the contest ends. For example, now the same song can be added to the playlist multiple times. While I initially thought this was logical because popular songs were included more, I think it should be fixed in the future. I'm also considering making a custom super cool website reserved for my lovely contributors 🤩&lt;/p&gt;

&lt;p&gt;I can say that most of the time of the project I developed was spent managing the inputs. I think user experience is very important at this point. Also a big kudos to everyone who has added their favorite songs on the GitHub repository and gave a feedback to me, thus contributing to an open source project!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.giphy.com%2Fmedia%2FxULW8v7LtZrgcaGvC0%2Fgiphy.gif%3Fcid%3Decf05e47o60s0u67ok16hoo3kcco0p4lypc0azzxvsfnwap6%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.giphy.com%2Fmedia%2FxULW8v7LtZrgcaGvC0%2Fgiphy.gif%3Fcid%3Decf05e47o60s0u67ok16hoo3kcco0p4lypc0azzxvsfnwap6%26rid%3Dgiphy.gif%26ct%3Dg" alt="thanks"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Frankly, without &lt;strong&gt;GitHub Actions&lt;/strong&gt;, this project would not have been easy to realize and popularize among developers. &lt;/p&gt;

&lt;p&gt;In this process, I also had the opportunity to explore and use many ready-made works in the GitHub Actions market:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;actions/checkout@v2 💖&lt;/li&gt;
&lt;li&gt;actions/download-artifact@v1 💖&lt;/li&gt;
&lt;li&gt;actions/github-script@v5 💖&lt;/li&gt;
&lt;li&gt;peter-evans/close-issue@v1 💖&lt;/li&gt;
&lt;li&gt;actions/upload-artifact@v1 💖&lt;/li&gt;
&lt;li&gt;actions/setup-python@v2 💖&lt;/li&gt;
&lt;li&gt;ad-m/github-push-action@master 💖&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Submission Category:
&lt;/h2&gt;

&lt;p&gt;Wacky Wildcards&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2FjRen3r5KuFwur3EuJf%2Fgiphy.gif%3Fcid%3Decf05e47ynsj8t8xocd4n5ip4zpkkktx04ob647x6gxvaw3k%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2FjRen3r5KuFwur3EuJf%2Fgiphy.gif%3Fcid%3Decf05e47ynsj8t8xocd4n5ip4zpkkktx04ob647x6gxvaw3k%26rid%3Dgiphy.gif%26ct%3Dg" alt="wackyw"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Yaml File or Link to Code
&lt;/h3&gt;

&lt;p&gt;Here is the repository:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/oz9un" rel="noopener noreferrer"&gt;
        oz9un
      &lt;/a&gt; / &lt;a href="https://github.com/oz9un/Developers-Playlist" rel="noopener noreferrer"&gt;
        Developers-Playlist
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A drop of musical taste from every contributor... Welcome to the developer's collaborative playlist. 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Developers' Playlist \(📀_💿)/&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A drop of musical taste from every contributor... Welcome to the &lt;strong&gt;developers' collaborative playlist&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/968d961f71e71cc332e38c360529f02fd71dbfc891adac5c30d29bee0b539526/68747470733a2f2f692e7363646e2e636f2f696d6167652f61623637373036633030303062656262393661313134663130646435396530643936316366633038"&gt;&lt;img src="https://camo.githubusercontent.com/968d961f71e71cc332e38c360529f02fd71dbfc891adac5c30d29bee0b539526/68747470733a2f2f692e7363646e2e636f2f696d6167652f61623637373036633030303062656262393661313134663130646435396530643936316366633038"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Playlist link: &lt;a href="https://open.spotify.com/playlist/5iI16F6SXezeIcxFFTsXWb" rel="nofollow noopener noreferrer"&gt;Developers' Collaborative Playlist&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Description🤖:&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;The same algorithm can be written differently by each developer. The developer's code style becomes their signature.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;&lt;strong&gt;&lt;p&gt;Coding is an art, so what do artists listen to while performing this art?&lt;/p&gt;&lt;/strong&gt;&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;The &lt;strong&gt;Developer's Playlist&lt;/strong&gt; analyzes opened issues on this repository using &lt;strong&gt;GitHub Actions&lt;/strong&gt; and collects developers' favorite songs into a collaborative playlist.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage📖:&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Open an issue with title &lt;strong&gt;'song request'&lt;/strong&gt; (⚠ 'Song request' and 'Song Request' also works right now.⚠)&lt;/li&gt;
&lt;li&gt;Write your favorite track to issue's body in format: "artist-song". (⚠ If there is a dash "-" in the artist or song title, please use space instead for now. ⚠)
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/57866851/145097376-2737eee3-f539-4f58-a036-9b9a0bba9dc1.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F57866851%2F145097376-2737eee3-f539-4f58-a036-9b9a0bba9dc1.png"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Wait for the Github Action Bot's response
&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/57866851/145097734-a87a6ff0-b4bb-4da0-b94c-5d761f09b797.png"&gt;&lt;img height="400" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F57866851%2F145097734-a87a6ff0-b4bb-4da0-b94c-5d761f09b797.png"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Enjoy the developers' collaborative playlist!&lt;/li&gt;
&lt;li&gt;You can also keep track of who added which songs by checking out the…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/oz9un/Developers-Playlist" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;You can also view the YAML file: &lt;a href="https://github.com/oz9un/Developers-Playlist/blob/main/.github/workflows/devs_playlist_action.yaml" rel="noopener noreferrer"&gt;devs_playlist_action.yaml&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Additional Resources / Info
&lt;/h2&gt;

&lt;p&gt;GitHub Actions Workflow:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdfvj3snja5nalcgd4xij.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdfvj3snja5nalcgd4xij.png" alt="github_workflow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Developers:&lt;br&gt;
1- &lt;a href="//github.com/oz9un"&gt;oz9un&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__709742"&gt;
    &lt;a href="/oz9un" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F709742%2F819a4005-40d3-4438-91fb-1ba2d12dc945.jpeg" alt="oz9un image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/oz9un"&gt;oz9un&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/oz9un"&gt;Im sure that we are living in a simulation.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
2- 1&lt;br&gt;
3- 2&lt;br&gt;
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2FcIqXqJeGVSfkpDUu1f%2Fgiphy.gif%3Fcid%3Decf05e47ky4hsnpud18s0d1wvdrhf0ykovpxsc3rtrm0q6xp%26rid%3Dgiphy.gif%26ct%3Dg" alt="devs"&gt;




&lt;p&gt;&lt;strong&gt;About the cover image&lt;/strong&gt;:&lt;br&gt;
Cover image is created with AI. Only using the text: "Developers Playlist"&lt;/p&gt;




&lt;h2&gt;
  
  
  It's the song request time!
&lt;/h2&gt;

&lt;p&gt;Let's open an &lt;a href="https://github.com/oz9un/Developers-Playlist/issues/new" rel="noopener noreferrer"&gt;issue&lt;/a&gt; with your favorite song and enjoy the &lt;strong&gt;Developers' Favorite Playlist!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2F3KC2jD2QcBOSc%2Fgiphy.gif%3Fcid%3Decf05e47wkabcrc0xnbb6d1fk8xwku3oeq7122nfcauin3z3%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2F3KC2jD2QcBOSc%2Fgiphy.gif%3Fcid%3Decf05e47wkabcrc0xnbb6d1fk8xwku3oeq7122nfcauin3z3%26rid%3Dgiphy.gif%26ct%3Dg" alt="hey"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Playlist: [Spotify Link](https://open.spotify.com/playlist/5iI16F6SXezeIcxFFTsXWb)&lt;/center&gt;

</description>
      <category>actionshackathon21</category>
      <category>github</category>
      <category>spotify</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Creating openssl.conf for Windows</title>
      <dc:creator>oz9un</dc:creator>
      <pubDate>Tue, 02 Nov 2021 05:14:07 +0000</pubDate>
      <link>https://dev.to/openlab/creating-opensslconf-for-windows-104g</link>
      <guid>https://dev.to/openlab/creating-opensslconf-for-windows-104g</guid>
      <description>&lt;p&gt;In this chapter, I will explain how to create &lt;strong&gt;openssl.conf&lt;/strong&gt; file with the way that Windows can process it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Parts to be changed in the default openssl.conf:
&lt;/h2&gt;

&lt;p&gt;For creating a default &lt;a href="https://jamielinux.com/docs/openssl-certificate-authority/appendix/root-configuration-file.html" rel="noopener noreferrer"&gt;openssl.conf&lt;/a&gt;, Jamie's amazing &lt;a href="https://jamielinux.com/docs/openssl-certificate-authority/" rel="noopener noreferrer"&gt;article&lt;/a&gt; would be a good start point.&lt;/p&gt;

&lt;p&gt;There are many differences between original Windows certificates and those created with using OpenSSL on Linux:&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Difference 1 → Issuer:
&lt;/h3&gt;

&lt;p&gt;Issuer is one of the most important field in the certificates. This must be interpreted correctly in order to make Windows accept our handcrafted certificate. &lt;/p&gt;

&lt;p&gt;Difference between certificate created with default openssl.conf and original Windows certificate:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvdm0htr8fjf39xt1ydu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvdm0htr8fjf39xt1ydu.png" alt="diff"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Solution for Difference 1:
&lt;/h3&gt;

&lt;p&gt;In this part, we define the section for the &lt;strong&gt;req&lt;/strong&gt; command. &lt;/p&gt;

&lt;p&gt;We can edit default_bits, default_md parts. But most importantly, we can change how to form the &lt;strong&gt;DN&lt;/strong&gt; with editing the &lt;strong&gt;req_distinguished_name&lt;/strong&gt; section.&lt;/p&gt;

&lt;p&gt;Default &lt;strong&gt;[ req ]&lt;/strong&gt; part would be similar to:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

[ req ]

default_bits = 2048
distinguished_name = req_distinguished_name
string_mask = utf8only
default_md = sha256
x509_extensions = v3_ca


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Corresponding default [ req_distinguished_name ] :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="o"&gt;[&lt;/span&gt; req_distinguished_name &lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="c"&gt;# See &amp;lt;https://en.wikipedia.org/wiki/Certificate_signing_request&amp;gt;.&lt;/span&gt;
countryName                     &lt;span class="o"&gt;=&lt;/span&gt; Country Name &lt;span class="o"&gt;(&lt;/span&gt;2 letter code&lt;span class="o"&gt;)&lt;/span&gt;
stateOrProvinceName             &lt;span class="o"&gt;=&lt;/span&gt; State or Province Name
localityName                    &lt;span class="o"&gt;=&lt;/span&gt; Locality Name
0.organizationName              &lt;span class="o"&gt;=&lt;/span&gt; Organization Name
organizationalUnitName          &lt;span class="o"&gt;=&lt;/span&gt; Organizational Unit Name
commonName                      &lt;span class="o"&gt;=&lt;/span&gt; Common Name
emailAddress                    &lt;span class="o"&gt;=&lt;/span&gt; Email Address


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;As you can see, there are lots of fields like countryName, stateOrProvinceName, localityName...&lt;/p&gt;

&lt;p&gt;This is why we see lots of information in the 'Issuer' field of the certificates created with OpenSSL. &lt;/p&gt;

&lt;p&gt;Edited &lt;strong&gt;[ req_distinguished_name ]&lt;/strong&gt; should be similar to:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="o"&gt;[&lt;/span&gt; req_distinguished_name &lt;span class="o"&gt;]&lt;/span&gt;

1.DC &lt;span class="o"&gt;=&lt;/span&gt; com
0.DC &lt;span class="o"&gt;=&lt;/span&gt; company
DC &lt;span class="o"&gt;=&lt;/span&gt; subdomain
commonName &lt;span class="o"&gt;=&lt;/span&gt; Common Name


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And user should type in that order:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lhyee9os78ht3c8nkon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lhyee9os78ht3c8nkon.png" alt="order"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a result, we successfully created a valid issuer:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg8sqrtvmudgi617pp2cu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg8sqrtvmudgi617pp2cu.png" alt="result1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Difference 2 → Missing Fields:
&lt;/h3&gt;

&lt;p&gt;Two fields, "Certificate Template Name" and "CA Version", are not available on the certificate that created with OpenSSL on Linux.&lt;/p&gt;

&lt;p&gt;It is hard to know about which fields are precisely checked when tricking Windows to accept your handcrafted OpenSSL certificate, but I think it is a good practice to make your certificate look exactly like the original one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faq7b29a6dx2wdz2kzmyt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faq7b29a6dx2wdz2kzmyt.png" alt="missingfields"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Solution for Difference 2:
&lt;/h3&gt;

&lt;p&gt;Firstly, define OID's at the top of our openssl.conf file:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scheme"&gt;&lt;code&gt;

&lt;span class="nv"&gt;oid_section&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;OIDs&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;OIDs&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nv"&gt;certificateTemplateName&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;6.1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;4.1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;311.20&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="nv"&gt;caVersion&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;6.1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;4.1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;311.21&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;We can skip the definition of the OID's and use the OID directly, of course. But defining them first and using them as variables would be a good practice.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Secondly, create a new requirement in &lt;strong&gt;[ reg ],&lt;/strong&gt; let's say &lt;strong&gt;v3_req&lt;/strong&gt; :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scheme"&gt;&lt;code&gt;

&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;req&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nv"&gt;default_bits&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2048&lt;/span&gt;
&lt;span class="nv"&gt;distinguished_name&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;req_distinguished_name&lt;/span&gt;
&lt;span class="nv"&gt;string_mask&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;default&lt;/span&gt;
&lt;span class="nv"&gt;default_md&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;sha256&lt;/span&gt;
&lt;span class="nv"&gt;x509_extensions&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;v3_ca&lt;/span&gt;
&lt;span class="nv"&gt;req_extensions&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;v3_req&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Lastly, define &lt;strong&gt;[ v3_req ]&lt;/strong&gt; :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scheme"&gt;&lt;code&gt;

&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;v3_req&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nv"&gt;subjectKeyIdentifier&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;hash&lt;/span&gt;
&lt;span class="nv"&gt;basicConstraints&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;critical,&lt;/span&gt; &lt;span class="nv"&gt;CA:true&lt;/span&gt;
&lt;span class="nv"&gt;keyUsage&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;digitalSignature,&lt;/span&gt; &lt;span class="nv"&gt;cRLSign,&lt;/span&gt; &lt;span class="nv"&gt;keyCertSign&lt;/span&gt;
&lt;span class="nv"&gt;certificateTemplateName&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;ASN1:PRINTABLESTRING:CA&lt;/span&gt;
&lt;span class="nv"&gt;caVersion&lt;/span&gt; &lt;span class="nv"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;ASN1:INTEGER:0&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;After that, you should create your certificate with the following parameter:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nt"&gt;-extensions&lt;/span&gt; v3_req


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;As a result, we successfully created our certificate fields:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F87i44tvxoysjt6cgyp7p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F87i44tvxoysjt6cgyp7p.png" alt="result2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Final:
&lt;/h2&gt;

&lt;p&gt;We have successfully created our openssl.conf!&lt;br&gt;
You can view the whole openssl.conf file from: &lt;a href="https://gist.github.com/oz9un/60cb7d491989002578d7d763dfda333c" rel="noopener noreferrer"&gt;GitHub Gist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2FnCRkXBaeCPyeX1fkrc%2Fgiphy.gif%3Fcid%3Decf05e47k54y73o40fa5zl14tw2o0pgpq90lalfatqndx668%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2FnCRkXBaeCPyeX1fkrc%2Fgiphy.gif%3Fcid%3Decf05e47k54y73o40fa5zl14tw2o0pgpq90lalfatqndx668%26rid%3Dgiphy.gif%26ct%3Dg" alt="final"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>openssl</category>
      <category>windows</category>
      <category>certificate</category>
      <category>linux</category>
    </item>
    <item>
      <title>SysmonForLinux - Logging File Create Events </title>
      <dc:creator>oz9un</dc:creator>
      <pubDate>Thu, 21 Oct 2021 05:33:41 +0000</pubDate>
      <link>https://dev.to/openlab/sysmonforlinux-logging-file-create-events-2bck</link>
      <guid>https://dev.to/openlab/sysmonforlinux-logging-file-create-events-2bck</guid>
      <description>&lt;p&gt;In this article, I will explain how to use SysmonForLinux and how to create specific configurations to keep track of file creation events.&lt;/p&gt;

&lt;p&gt;For further information about events and configuration options; you can visit my github repository: &lt;a href="https://github.com/oz9un/SysmonForLinux-Manual" rel="noopener noreferrer"&gt;oz9un&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Sysmon in a nutshell:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sysmon&lt;/strong&gt; (System Monitor) is a Windows system service that logs system activity to the Windows event log. Now, it is available for &lt;strong&gt;Linux&lt;/strong&gt; too! &lt;/p&gt;

&lt;p&gt;It was developed by Microsoft as an open source project. Even though it is doubtful to see such a contribution, I am very glad about it 🤭&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2FANbD1CCdA3iI8%2Fgiphy.gif%3Fcid%3Decf05e47chlsv1aaptk03nsstucjmbytwln7w8t9locgvmfi%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2FANbD1CCdA3iI8%2Fgiphy.gif%3Fcid%3Decf05e47chlsv1aaptk03nsstucjmbytwln7w8t9locgvmfi%26rid%3Dgiphy.gif%26ct%3Dg" alt="sus_gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  File Create event:
&lt;/h2&gt;

&lt;p&gt;As its name suggests, this event detects when a file is created on Linux systems.&lt;/p&gt;

&lt;p&gt;This event can be especially useful when tracking auto-startup folders and folders where everyone has a permission to create files. Because most of the time, they are the main targets of malicious users 👹.&lt;/p&gt;

&lt;p&gt;A normal file creation event log would looks like this:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4x8zf6qaw3r9m1164w7d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4x8zf6qaw3r9m1164w7d.png" alt="FileCreation Event Log"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Configuring File Create event:
&lt;/h2&gt;

&lt;p&gt;By default, SysmonForLinux logs every file creation events. But we are talking about Linux. Even if you connect to a server via SSH; that results in the creation of many tmp files.&lt;/p&gt;

&lt;p&gt;As a result, you can guess how chaotic the log file has become. This is why we don't want to log everything, especially in case of file creation event.&lt;/p&gt;

&lt;p&gt;File Create event has 7 different description fields that we can use as filters:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbw6rxk7loe0i65y60rx1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbw6rxk7loe0i65y60rx1.png" alt="Description Fields"&gt;&lt;/a&gt;&lt;br&gt;
You can view all description fields for each event on my &lt;a href="https://github.com/oz9un/SysmonForLinux-Manual" rel="noopener noreferrer"&gt;github&lt;/a&gt; page!&lt;/p&gt;

&lt;p&gt;When creating a configuration file (xml) for SysmonForLinux, we can use this fields as a filter.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Example scenario:
&lt;/h2&gt;

&lt;p&gt;Suppose you want to keep log of the every file creation event with the following properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File should be created in &lt;em&gt;/tmp&lt;/em&gt; or under &lt;em&gt;/home/secret&lt;/em&gt; folder.&lt;/li&gt;
&lt;li&gt;File should be created in &lt;em&gt;October 2021&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;File shouldn't be created with &lt;em&gt;/usr/sbin/cups-browsed&lt;/em&gt; daemon (This printer daemon uses /tmp file quite often).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Desired configuration file should looks like that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Event ID 11 == FileCreate. Log what we want! --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;RuleGroup&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="na"&gt;groupRelation=&lt;/span&gt;&lt;span class="s"&gt;"and"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;FileCreate&lt;/span&gt; &lt;span class="na"&gt;onmatch=&lt;/span&gt;&lt;span class="s"&gt;"include"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;TargetFilename&lt;/span&gt; &lt;span class="na"&gt;condition=&lt;/span&gt;&lt;span class="s"&gt;"contains any"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;/home/secret/;/tmp/&lt;span class="nt"&gt;&amp;lt;/TargetFilename&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;UtcTime&lt;/span&gt; &lt;span class="na"&gt;condition=&lt;/span&gt;&lt;span class="s"&gt;"contains"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;2021-10&lt;span class="nt"&gt;&amp;lt;/UtcTime&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/FileCreate&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;FileCreate&lt;/span&gt; &lt;span class="na"&gt;onmatch=&lt;/span&gt;&lt;span class="s"&gt;"exclude"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Image&lt;/span&gt; &lt;span class="na"&gt;condition=&lt;/span&gt;&lt;span class="s"&gt;"is"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;/usr/sbin/cups-browsed&lt;span class="nt"&gt;&amp;lt;/Image&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/FileCreate&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/RuleGroup&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can view the whole configuration file from: &lt;a href="https://github.com/oz9un/SysmonForLinux-Manual/blob/main/Description%20Field%20Examples/FileCreate_ExampleScenario.xml" rel="noopener noreferrer"&gt;Example Scenario&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Results:
&lt;/h2&gt;

&lt;p&gt;To view sysmon's log file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /var/log/syslog | &lt;span class="nb"&gt;sudo&lt;/span&gt; /opt/sysmon/sysmonLogView &lt;span class="nt"&gt;-X&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3ujafruawscruow8w2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3ujafruawscruow8w2c.png" alt="Sysmon Log Output"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, we successfully created a configuration file according to our properties and caught some malicious events already!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2FTOWeGr70V2R1K%2Fgiphy.gif%3Fcid%3Decf05e47a1op0mndh2ygfi3sf7fx21ioab3rxnp60jdeezsn%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2FTOWeGr70V2R1K%2Fgiphy.gif%3Fcid%3Decf05e47a1op0mndh2ygfi3sf7fx21ioab3rxnp60jdeezsn%26rid%3Dgiphy.gif%26ct%3Dg" alt="hacker_gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  End &amp;amp; Contact:
&lt;/h2&gt;

&lt;p&gt;This is at the end of my first post about SysmonForLinux. I plan to write much more on this subject as I find time. I would be very happy if you can give a feedback. Stay in touch!&lt;/p&gt;

&lt;p&gt;Github: &lt;a href="https://github.com/oz9un" rel="noopener noreferrer"&gt;https://github.com/oz9un&lt;/a&gt;&lt;br&gt;
Twitter: &lt;a href="https://twitter.com/oz9un" rel="noopener noreferrer"&gt;https://twitter.com/oz9un&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2FiPiUxztIL4Sl2%2Fgiphy.gif%3Fcid%3Decf05e47u8cqoaovibilphanyitfewmsnw8wa7c35tqxez0p%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2FiPiUxztIL4Sl2%2Fgiphy.gif%3Fcid%3Decf05e47u8cqoaovibilphanyitfewmsnw8wa7c35tqxez0p%26rid%3Dgiphy.gif%26ct%3Dg" alt="cat_gif"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sysmon</category>
      <category>linux</category>
      <category>log</category>
      <category>devops</category>
    </item>
    <item>
      <title>Liman ile LAPS Yönetimi</title>
      <dc:creator>oz9un</dc:creator>
      <pubDate>Tue, 19 Oct 2021 05:13:58 +0000</pubDate>
      <link>https://dev.to/aciklab/liman-ile-laps-yonetimi-20n</link>
      <guid>https://dev.to/aciklab/liman-ile-laps-yonetimi-20n</guid>
      <description>&lt;p&gt;Yerel yöneticilerin parolalarını kolayca yönetmemizi sağlayan LAPS, artık &lt;strong&gt;Domain&lt;/strong&gt; eklentisi aracılığı ile Liman üzerinde de kullanılabilmektedir. &lt;/p&gt;

&lt;h2&gt;
  
  
  Kullanım senaryosu:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;LAPS'ın kurulu olduğu 'WINSERVDC' adında bir Windows DC'miz olduğunu ve bu sunucuyu Liman'a &lt;strong&gt;Domain&lt;/strong&gt; eklentisi ile beraber eklediğimizi varsayalım:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5ia9RuDQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/25bunam6bf2p4b6q7eim.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5ia9RuDQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/25bunam6bf2p4b6q7eim.png" alt="Liman Arayüzü"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;WINSERVDC sunucumuz içerisinde LAPS'ın yüklü olduğu istemcilerimizi ise 'LAPS-CLIENTS' OU altında toplamış olalım:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tIydo1pv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/366ys117yxqy9zo1312r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tIydo1pv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/366ys117yxqy9zo1312r.png" alt="Domain Eklentisi Arayüzü"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Artık &lt;strong&gt;Domain&lt;/strong&gt; eklentisinin arayüzünden yönetmek istediğimiz istemcinin üzerine sağ tıklayarak seçenekleri açabilir ve 'LAPS Yönetim' ekranına erişebiliriz:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wj6HPidn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/giu0ngx2fcmg5gbtm0op.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wj6HPidn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/giu0ngx2fcmg5gbtm0op.png" alt="LAPS Yönetim Erişimi"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Açılan 'LAPS Yönetim' ekranında kullanıcının karşısına 3 temel bilgi gelmektedir:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Parola&lt;/li&gt;
&lt;li&gt;Parolanın yenilenme tarihi&lt;/li&gt;
&lt;li&gt;Parolanın güncellenmiş yenilenme tarihi&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Yönetici yetkilerine sahip kullanıcı WINSERVDC Domain Controller'ı üzerinde 'LAPS Yönetim' ekranına erişerek istediği istemcinin 'Parola yenilenme tarihi'ni güncelleyebilmektedir. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kT11r3jS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mivocas2nc9yqw7hhwrb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kT11r3jS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mivocas2nc9yqw7hhwrb.png" alt="LAPS Yönetim Ekranı"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Parola yenilenme tarihi 'Change expiration time' butonu aracılığı ile tarih ve saat olarak ayarlanabilmektedir:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HuW9qD_p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r1lkzwfq0o1bya7lqmf9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HuW9qD_p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r1lkzwfq0o1bya7lqmf9.png" alt="LAPS Tarih Ayarı"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--il6_5uRR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x2si7xyzsl20m2l0queb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--il6_5uRR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x2si7xyzsl20m2l0queb.png" alt="LAPS Saat Ayarı"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Son adımda yönetici yeni tarih ve saat değerini kaydederek hedef istemcideki parolanın yenilenme tarihini güncelleyebilir:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zfj4YBCM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9wmwor2vi0dup9hbdbxy.png" alt="LAPS Tarih Güncellemesi"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Kaydedildikten sonra:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iOXg6KCC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k2sjmwnxdvrkx833uw0n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iOXg6KCC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k2sjmwnxdvrkx833uw0n.png" alt="LAPS Yeni Tarih"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;LAPS Parola yenilenme tarihi başarıyla güncellendi. Artık 18/10/2021 08:03 tarihinden sonra istemci üzerinde tetiklenecek bir gpupdate event'i sonucunda istemci yeni bir parola üretecek ve bu bilgiyi WINSERVDC ile paylaşacaktır. Biz de LAPS Yönetim ekranı üzerinde bu bilginin güncellendiğini görmüş olacağız.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>laps</category>
      <category>windows</category>
      <category>liman</category>
      <category>password</category>
    </item>
  </channel>
</rss>
