Git Product home page Git Product logo

blazam-app / blazam Goto Github PK

View Code? Open in Web Editor NEW
14.0 2.0 1.0 14.26 MB

A modern Active Directory management web application with a focus on delegation

Home Page: https://blazam.org

License: Other

HTML 14.82% C# 33.92% PowerShell 0.25% CSS 3.24% JavaScript 47.77%
account-management active-directory management staff-management user-management web-app web-application webapp active-directory-integration group-membership password-reset user-creation blazor

blazam's Introduction

BLAZAM

Introducing Blazam's new Logo

Website

blazam.org

Demo

blazam.org/demo

Documentation

docs.blazam.org

Installation

Blazam's Web Installer is the recommended installation method.

Web Installer

Manual Installation

Who is it for?

  • Do you manage an Active Directory environment?
  • Do you want easier delegation of basic account functions?
  • Do you want to easily unlock, or edit a user from your phone?
  • Setting up ACL's in active directory is complicated, and at the end of the day, you're still stuck with a desktop interface.
  • This app will help you enable your users.

What is Blazam?

  • Blazam is a flexible Active Directory management portal.
  • The key feature is it's permissions system which allows you to empower your users to manage the groups, users, ou's, and computers you allow them to.
  • Manage user group assignents, reset passwords, unlock, disable, and enable accounts.
  • Configurable user creation templates to share with your users to ensure the proper infomation is provided.
  • Manage user thumbnail photo.
  • Access Active Directory recycle bin from any web browser.

blazam's People

Contributors

dependabot[bot] avatar jacobsen9026 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

jacobsen9026

blazam's Issues

System settings page dependency injection disposal issue

Error Message: Cannot access a disposed context instance. A common cause of this error is disposing a context instance that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling 'Dispose' on the context instance, or wrapping it in a using statement. If you are using dependency injection, you should let the dependency injection container take care of disposing context instances. Object name: 'SqlDatabaseContext'.
Stack Trace:
at Microsoft.EntityFrameworkCore.DbContext.CheckDisposed()

at Microsoft.EntityFrameworkCore.DbContext.get_ContextServices()

at Microsoft.EntityFrameworkCore.DbContext.get_ChangeTracker()

at Microsoft.EntityFrameworkCore.Query.CompiledQueryCacheKeyGenerator.GenerateCacheKeyCore(Expression query, Boolean async)

at Microsoft.EntityFrameworkCore.Query.RelationalCompiledQueryCacheKeyGenerator.GenerateCacheKeyCore(Expression query, Boolean async)

at Microsoft.EntityFrameworkCore.SqlServer.Query.Internal.SqlServerCompiledQueryCacheKeyGenerator.GenerateCacheKey(Expression query, Boolean async)

at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)

at BLAZAM.Gui.UI.Settings.SystemSettings.OnInitializedAsync() in D:\a\BLAZAM\BLAZAM\BLAZAMGui\UI\Settings\SystemSettings.razor:line 53

at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()

at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)

Fatal exception when changing parent templates of an existing template

Microsoft.EntityFrameworkCore : System.InvalidOperationException
Error Message: The instance of entity type 'ActiveDirectoryField' cannot be tracked because another instance with the key value '{Id: 5}' is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached.
Stack Trace:
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap`1.ThrowIdentityConflict(InternalEntityEntry entry)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap`1.Add(TKey key, InternalEntityEntry entry, Boolean updateDuplicate)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.StartTracking(InternalEntityEntry entry)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetEntityState(EntityState oldState, EntityState newState, Boolean acceptChanges, Boolean modifyProperties)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetEntityState(EntityState entityState, Boolean acceptChanges, Boolean modifyProperties, Nullable1 forceStateWhenUnknownKey, Nullable1 fallbackState)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityGraphAttacher.PaintAction(EntityEntryGraphNode`1 node)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityEntryGraphIterator.TraverseGraph[TState](EntityEntryGraphNode1 node, Func2 handleNode)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityEntryGraphIterator.TraverseGraph[TState](EntityEntryGraphNode1 node, Func2 handleNode)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityEntryGraphIterator.TraverseGraph[TState](EntityEntryGraphNode1 node, Func2 handleNode)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityEntryGraphIterator.TraverseGraph[TState](EntityEntryGraphNode1 node, Func2 handleNode)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityGraphAttacher.AttachGraph(InternalEntityEntry rootEntry, EntityState targetState, EntityState storeGeneratedWithKeySetTargetState, Boolean forceStateWhenUnknownKey)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.NavigationFixer.NavigationReferenceChanged(InternalEntityEntry entry, INavigationBase navigationBase, Object oldValue, Object newValue)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.ChangeDetector.DetectNavigationChange(InternalEntityEntry entry, INavigationBase navigationBase)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.ChangeDetector.LocalDetectChanges(InternalEntityEntry entry)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.ChangeDetector.DetectChanges(IStateManager stateManager)

at Microsoft.EntityFrameworkCore.ChangeTracking.ChangeTracker.DetectChanges()

at Microsoft.EntityFrameworkCore.DbContext.TryDetectChanges()

at Microsoft.EntityFrameworkCore.DbContext.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken)

at BLAZAM.Gui.UI.Settings.Templates.EditDirectoryTemplate.SaveTemplate() in D:\a\BLAZAM\BLAZAM\BLAZAMGui\UI\Settings\Templates\EditDirectoryTemplate.razor:line 633

at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)

at Microsoft.AspNetCore.Components.Forms.EditForm.HandleSubmitAsync()

at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)

at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)

Job Step Stop on Failure

Currently only an entire job can be set to stop on a failed step. Extend this functionality to each step for different behavior depending on the importance of the step.

Another possible memory leak in live computer monitoring

Error
{Data: [], HResult: -2146232832, HelpLink: null, InnerException: null, Message: 'Impersonation running as application identity', Source: null, StackTrace: ' at BLAZAM.Common.Data.WindowsImpersonation.<>c__DisplayClass18_01.<Run>b__0() in D:\a\BLAZAM\BLAZAM\BLAZAMCommon\Data\WindowsImpersonation.cs:line 107 at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Security.Principal.WindowsIdentity.RunImpersonatedInternal(SafeAccessTokenHandle token, Action action) at BLAZAM.Common.Data.WindowsImpersonation.Run[T](Func1 task) in D:\a\BLAZAM\BLAZAM\BLAZAMCommon\Data\WindowsImpersonation.cs:line 99
at BLAZAM.ActiveDirectory.Adapters.RemoteSession.GetNewSessionState() in D:\a\BLAZAM\BLAZAM\BLAZAMActiveDirectory\Adapters\RemoteSession.cs:line 236
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.TimerQueueTimer.Fire(Boolean isThreadPool)
at System.Threading.TimerQueue.FireNextTimers()
at System.Threading.UnmanagedThreadPoolWorkItem.ExecuteUnmanagedThreadPoolWorkItem(IntPtr callback, IntPtr state)
at System.Threading.UnmanagedThreadPoolWorkItem.ExecuteUnmanagedThreadPoolWorkItem(IntPtr callback, IntPtr state)
at System.Threading.UnmanagedThreadPoolWorkItem.System.Threading.IThreadPoolWorkItem.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
--- End of stack trace from previous location ---

Update Branches

Describe the bug
I thought I wrote it already, 90% sure but seemed to have lost it. Will have to write again.

After moving user

BLAZAM : System.NullReferenceException
Error Message: Object reference not set to an instance of an object.
Stack Trace:
at BLAZAM.Pages.OU.ViewOU.OnInitializedAsync() in D:\a\BLAZAM\BLAZAM\BLAZAM\Pages\OU\ViewOU.razor:line 78

at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()

at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)

Email Prefill

If no email for a user exists, populate from AD if available.

Session Timeout on login

Describe the bug
The configured session cookie timeout is not applied after login, until a refresh is made.

To Reproduce
Steps to reproduce the behavior:

  1. Login
  2. Navigate without page refreshes
  3. Wait 60 seconds for default timeout to expire
  4. Navigate or refresh and get redirected back to login

Expected behavior
Have the proper timeout after login without user interaction.

Deny All

Describe the bug
The default deny all access level has nothing in it.

Environment (please complete the following information):

  • Blazam Version
  • Running under IIS/Service
    Both

BLAZAMSession : System.NullReferenceException" Stack Trace: at BLAZAM.Session.ApplicationNewsService.

Hi @jacobsen9026

I see that the error output shows that some part of this code is fixed however, a new error output is being thrown for the same ApplicationNewsService.cs, image attached:

Something terrible has happened...
BLAZAMSession : System.NullReferenceException
Error Message: Object reference not set to an instance of an object.
Stack Trace:
at BLAZAM.Session.ApplicationNewsService.GetUnreadNewsItems(IApplicationUserState user) in D:\a\BLAZAM\BLAZAM\BLAZAMSession\ApplicationNewsService.cs:line 69

at BLAZAM.Gui.UI.Outputs.ApplicationNewsProvider.RefreshUnreadItems() in D:\a\BLAZAM\BLAZAM\BLAZAMGui\UI\Outputs\ApplicationNewsProvider.razor:line 111

at BLAZAM.Gui.UI.Outputs.ApplicationNewsProvider.RefreshItems() in D:\a\BLAZAM\BLAZAM\BLAZAMGui\UI\Outputs\ApplicationNewsProvider.razor:line 96

at BLAZAM.Gui.UI.Outputs.ApplicationNewsProvider.OnInitialized() in D:\a\BLAZAM\BLAZAM\BLAZAMGui\UI\Outputs\ApplicationNewsProvider.razor:line 92

at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()

image

Originally posted by @swamipurnamsha in #276 (comment)

Update branch issue

Not sure if this extends all the way to Dev branch, but on Nightly 0.8.9 stable 0.8.9. was not being updated to, it was reapplying the nightly, the branch setting was also nightly.

Connection Error

Hi,
i have installed it manually.
On the first try to open the install-process starts and after creating the database it stops. Step 2 doesn's start...

What could be the issue?

I'm running it on a Windows Server 2022 / IIS/ Database is on an external NAS

Any idea???

Password change delay

A recent change to password changes has caused a long ~10 second delay when changing

"BLAZAMSession : System.NullReferenceException" Stack Trace: at BLAZAM.Session.ApplicationNewsService.

The Blazor application encounters an error "BLAZAMSession : System.NullReferenceException"

"Error Message: Object reference not set to an instance of an object.
Stack Trace:
at BLAZAM.Session.ApplicationNewsService.<>c__DisplayClass12_0.b__0(NewsItem x) in D:\a\BLAZAM\BLAZAM\BLAZAMSession\ApplicationNewsService.cs:line 62"

I am running the Blazam App using IIS with all the .Net dependencies installed and using a MySQL database, we have configured the active directory and finalized the installation. After the installation the page results in the same error mentioned earlier "BLAZAMSession : System.NullReferenceException"

The Blazor WebAssembly application should not throw an exception related to the "applications news service" not able to be handled.

Within the IIS authentication configuration, it is set to allow Anonymous Authentication and the .Net Authorization is set to Allow All Users.

For additional troubleshooting: Within the Blazam application directory the IIS_IUSRS and IUSR have been granted full control of the Blazam root directory.

ApplicationPool is set to AlwayRunning and have Set IIS Site to Preload true

OS: Windows Server 2022
Browser: Edge
Version: 122.0.2365.92
Blazam version: 0.8.9.2024.02.28.0056

image
.

image

Delegated access to other members in AD organization

Hi @jacobsen9026 definitely we would like to have blazam for an AD delegation for non IT members. Sharing the use case below:

Use Case 1:
The tasks we are currently doing in AD on daily basis:
Creating users, Enabling/Disabling users, Resetting passwords, Assigning/Unassigning users to groups, Mapping computers to users.
All these tasks are being done by a couple of people(lets call this group: helpdesk) and they do these taassks by accessing AD.

In order to make sure that AD data is not modified unintentionally by helpdesk, we need to stop anyone from accessing Active directory directly (except a couple of admins).

Blazam can help in this case where we need to provide these group of people a non-superuser access through Blazam and the above mentioned administrative tasks can be performed through Blazam. But currently due to a bug in Blazam, helpdesk members are not able to perform these tasks (but a blazam super user can perform just fine)

Use case 2:
We have different departments in our organization which are represented by different OUs in AD.
We want to delegate these administrative tasks to the respective departments.
In order for that to happen, we need a couple of persons from each OU/department(lets call these couple of people: dept_spoc group) to be given a non-superuser access to Blazam. Effectively, there will be 1 dept spoc group in each departmet/OU.
And they can login to Blazam and perform these tasks for members of their own departments.

The important thing here is that they should not be able to perform these actions on any OU/department, other than their own.

For this we need to set access permissions for each dept_spoc group in such a way that this group can not modify any property outside their own department/OU.
(Right now it is not possible in Blazam).

Installation wizard

Installation wizard has many bugs, requires refreshes and server restarts to get through

OU Privilege Mapper cannot be edited

The OU privilege mapper cannot be edited.

We are running the Blazam App as a service on Blazam version: 0.9.0.2024.03.30.1856

When accessing Blazam Configure->Permissions->Mappings->OU Privilege Mapper, we've encountered an issue where the checkbox for providing mappings to delegates doesn't become selected, preventing us from saving new mappings. This problem persists in the demo website, as illustrated in the attached .GIF

This issue was not there in the earlier releases.

OS: Windows Server 2022
Browser: Google Chrome
Version: 123.0.6312.105

Mass Add Printers

Describe the solution you'd like
Add all, or a selection, of the shared printers on a print server into Active Directory.

Describe alternatives you've considered
Create one at a time....

Error loading sytstem settings page on reduced privilege accounts

Error Message: Access to the registry key 'Global' is denied.
Stack Trace:
at System.Diagnostics.PerformanceDataRegistryKey.Win32Error(Int32& errorCode, String name)

at System.Diagnostics.PerformanceDataRegistryKey.GetValue(String name, Boolean usePool)

at System.Diagnostics.PerformanceMonitor.GetData(String item, Boolean usePool)

at System.Diagnostics.PerformanceCounterLib.GetPerformanceData(String item, Boolean usePool)

at System.Diagnostics.PerformanceCounterLib.get_CategoryTable()

at System.Diagnostics.PerformanceCounterLib.CounterExists(String category, String counter, Boolean& categoryExists)

at System.Diagnostics.PerformanceCounterLib.CounterExists(String machine, String category, String counter)

at System.Diagnostics.PerformanceCounter.InitializeImpl()

at System.Diagnostics.PerformanceCounter.Initialize()

at System.Diagnostics.PerformanceCounter..ctor(String categoryName, String counterName, String instanceName, Boolean readOnly)

at System.Diagnostics.PerformanceCounter..ctor(String categoryName, String counterName, String instanceName)

at BLAZAM.Gui.UI.Settings.ProcessResourceUsage.b__12_1() in D:\a\BLAZAM\BLAZAM\BLAZAMGui\UI\Settings\ProcessResourceUsage.razor:line 61

at System.Threading.Tasks.Task.InnerInvoke()

at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)

--- End of stack trace from previous location ---

at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

--- End of stack trace from previous location ---

at BLAZAM.Gui.UI.Settings.ProcessResourceUsage.OnInitializedAsync() in D:\a\BLAZAM\BLAZAM\BLAZAMGui\UI\Settings\ProcessResourceUsage.razor:line 59

at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()

at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)

Renaming Display Name

Describe the bug
When renaming the display name of a directory entry, the check for duplicate warning always happens, and it prevents changing, it should only prevent saving.

Someone

Supplied bad credentials for their AD connection, I don't need remote logging of bad credentials....

Error
{Data: [], ErrorCode: -2147023570, ExtendedError: -2146893044, ExtendedErrorMessage: '8009030C: LdapErr: DSID-0C09070F, comment: AcceptSecurityContext error, data 52f, v4563', HResult: -2147023570, HelpLink: null, InnerException: null, Message: 'The user name or password is incorrect.', Source: 'System.DirectoryServices', StackTrace: ' at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
at BLAZAM.ActiveDirectory.Searchers.ADSearch.PerformSearch[TObject,TInterface](DateTime startTime, DirectorySearcher searcher, Int32 pageSize) in D:\a\BLAZAM\BLAZAM\BLAZAMActiveDirectory\Searchers\ADSearch.cs:line 283
at BLAZAM.ActiveDirectory.Searchers.ADSearch.Search[TObject,TInterface](Nullable`1 token) in D:\a\BLAZAM\BLAZAM\BLAZAMActiveDirectory\Searchers\ADSearch.cs:line 253', TargetSite: 'Void Bind(Boolean)'}

Creating template from copy

Something terrible has happened...
Microsoft.EntityFrameworkCore : System.InvalidOperationException
Error Message: The instance of entity type 'ActiveDirectoryField' cannot be tracked because another instance with the key value '{Id: 22}' is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached.
Stack Trace:
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap`1.ThrowIdentityConflict(InternalEntityEntry entry)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap`1.Add(TKey key, InternalEntityEntry entry, Boolean updateDuplicate)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap`1.Add(TKey key, InternalEntityEntry entry)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap`1.Add(InternalEntityEntry entry)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.StartTracking(InternalEntityEntry entry)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetEntityState(EntityState oldState, EntityState newState, Boolean acceptChanges, Boolean modifyProperties)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetEntityStateAsync(EntityState entityState, Boolean acceptChanges, Boolean modifyProperties, Nullable1 forceStateWhenUnknownKey, Nullable1 fallbackState, CancellationToken cancellationToken)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityGraphAttacher.PaintActionAsync(EntityEntryGraphNode`1 node, CancellationToken cancellationToken)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityEntryGraphIterator.TraverseGraphAsync[TState](EntityEntryGraphNode1 node, Func3 handleNode, CancellationToken cancellationToken)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityEntryGraphIterator.TraverseGraphAsync[TState](EntityEntryGraphNode1 node, Func3 handleNode, CancellationToken cancellationToken)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityEntryGraphIterator.TraverseGraphAsync[TState](EntityEntryGraphNode1 node, Func3 handleNode, CancellationToken cancellationToken)

at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityGraphAttacher.AttachGraphAsync(InternalEntityEntry rootEntry, EntityState targetState, EntityState storeGeneratedWithKeySetTargetState, Boolean forceStateWhenUnknownKey, CancellationToken cancellationToken)

at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.AddAsync(TEntity entity, CancellationToken cancellationToken)

at BLAZAM.Gui.UI.Settings.Templates.EditDirectoryTemplate.SaveTemplate() in C:\Users\cjacobsen\source\repos\Blazam-App\BLAZAM\BLAZAMGui\UI\Settings\Templates\EditDirectoryTemplate.razor:line 503

at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)

at Microsoft.AspNetCore.Components.Forms.EditForm.HandleSubmitAsync()

at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)

at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.